如何使用TPL启动服务线程?

时间:2014-10-12 21:32:51

标签: c# multithreading windows-services task-parallel-library

过去,我使用Thread对象创建了服务的主线程。现在我试图将其更新为TPL。不幸的是,服务在循环中一次传递后结束。我需要做些什么来保持任务活着?

    protected override void OnStart(string[] args)
    {
        _workerThread = Task.Run(() =>
        {
            while (true)
            {
                Console.WriteLine("go");
                Thread.Sleep(10000);
            }
        });
    }

更多信息:

为了调试服务,如果Environment.UserInteractive设置为true,我设置了一个标志来启动服务作为控制台应用程序。所以我想我需要它继续进入控制台模式和服务。

1 个答案:

答案 0 :(得分:1)

创建新Thread时,默认情况下它是前台线程(其IsBackground设置为false)。这意味着你的控制台应用程序在线程完成之前不会结束,即使Main在此之前返回。

另一方面,

Task在线程池上运行,该线程池仅包含后台线程。这意味着,当您的Main返回时,即使有一些Task仍在运行,应用程序也会退出。

您可以WaitTask末尾的Main处解决此问题。