1
我有一個webservice,它在被調用時產生一個子線程。子線程本身有一個控制循環,應該運行直到它被告知在將來某個時刻終止。在Web服務調用中創建子線程後停止
我使用下面的代碼:
namespace MyService
{
public class MyService : IMyService
{
// Starts a new worker loop on a new thread
public bool startMyProcess(string Name, Guid ID)
{
try
{
// Get DB connection
string dbConn = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
TManagement tManagement = new TManagement(dbConn);
// If a valid ID has been entered, create a new thread
if (tManagement.validateID(ID) == 0)
{
MainLoop myWorker = new MainLoop();
Thread bw = new Thread(() => myWorker.startWebServiceLoop(Name, ID));
bw.Start();
return true;
}
else
{
return false; // The ID is invalid
}
}
catch
{
// An error has occurred
return false;
}
}
}
}
然而,經過幾次成功的循環(做同樣的事情)線「BW」終止。
我想這個子線程無限期地繼續。我懷疑一旦web服務線程終止,子線程被殺死。有沒有辦法避免這種情況?
野性未受教育的猜測:是否將線程的'IsBackground'設置爲'false'幫助? –
這有點令人困惑:如果服務線程終止,那麼你的線程也應該終止。爲什麼你希望線程在服務線程退出後繼續運行?無論如何,我們不知道線程的控制循環中有什麼,所以很難說出線程爲什麼退出(即可能是因爲控制循環有導致線程退出的條件)。 – Kiril
@DanAbramov如果OP想要線程在服務線程終止後繼續運行,那麼'IsBackground'應該是'false'。 – Kiril