【发布时间】:2014-10-12 21:32:51
【问题描述】:
过去,我使用 Thread 对象创建了服务的主线程。现在我正在尝试将其更新为 TPL。不幸的是,服务在我的循环中通过一次后结束。我需要做什么才能使任务保持活力?
protected override void OnStart(string[] args)
{
_workerThread = Task.Run(() =>
{
while (true)
{
Console.WriteLine("go");
Thread.Sleep(10000);
}
});
}
更多信息:
为了调试服务,如果 Environment.UserInteractive 设置为 true,我设置了一个标志以将服务作为控制台应用程序启动。所以我想我需要它继续在控制台模式和服务中运行。
【问题讨论】:
-
“结束”是什么意思?那应该可以正常工作。 (虽然你会想要
TaskOptions.LongRunning) -
您检查过您的事件日志是否有错误,因为服务不会“结束”,除非停止
-
@DavidG:我不这么认为;服务控制管理器始终保持自己的线程运行,因此服务不需要这样做。但这将是 Win32 线程,而不是 .NET 线程;也许当最后一个 .NET 线程退出时 .NET 会自动退出进程,即使还有 Win32 线程仍在运行?
-
@HarryJohnston 我不确定,几个月前我不得不开发服务应用程序。尝试挖掘一些代码,但它们都启动计时器。现在要去玩了...
-
@HarryJohnston 不,发布的代码没有任何问题。它一定是由于其他地方的某种未处理的异常而结束。
标签: c# multithreading windows-services task-parallel-library