我有一个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”终止。
我希望这个子线程能够无限期地继续下去。我怀疑,一旦webservice线程终止,子生成的线程就会被杀死。有没有办法避免这种情况?
答案 0 :(得分:1)
更好的设计是使用Windows服务来托管长时间运行的线程。您的Web服务可以通过Windows服务托管的小型WCF服务与Windows服务进行通信。
Windows服务中的线程可以持续所需的时间。 Web服务是针对请求/响应范例而设计的,听到它并不总是跟踪由于客户请求而不直接发生的事情,我并不感到惊讶。