过去,我使用Thread对象创建了服务的主线程。现在我试图将其更新为TPL。不幸的是,服务在循环中一次传递后结束。我需要做些什么来保持任务活着?
protected override void OnStart(string[] args)
{
_workerThread = Task.Run(() =>
{
while (true)
{
Console.WriteLine("go");
Thread.Sleep(10000);
}
});
}
更多信息:
为了调试服务,如果Environment.UserInteractive设置为true,我设置了一个标志来启动服务作为控制台应用程序。所以我想我需要它继续进入控制台模式和服务。
答案 0 :(得分:1)
创建新Thread
时,默认情况下它是前台线程(其IsBackground
设置为false
)。这意味着你的控制台应用程序在线程完成之前不会结束,即使Main
在此之前返回。
Task
在线程池上运行,该线程池仅包含后台线程。这意味着,当您的Main
返回时,即使有一些Task
仍在运行,应用程序也会退出。
您可以Wait
在Task
末尾的Main
处解决此问题。