c# – 如何在Windows服务启动时运行任务?

我有一个 Windows服务,我已经编写了代码来在OnStart()事件中运行任务:
protected override void OnStart(string[] args)
        {
            this.DoTask();
        }

private void DoTask()
        {
            Task task1 = Task.Factory.StartNew(() => this.OriginalFileProcessor.StartPolling());

            try
            {
                Task.Wait(task1);
            }
            catch (Exception ex)
            {
                this.Log.Error("Failed running the task",ex);
            }           
        }

DoTask是一个永无止境的循环.它仅在服务停止时停止.

但是当我尝试启动服务时,它会等待很长时间然后给我以下错误

Windows Could not start the ... service on Local Computer.
Error 1053: The service did not respond to the start or control request in a timely fashion.

怎么解决

解决方法

你为什么要等完你的任务?

我认为Task.Wait阻止了你当前的线程,然后你在启动服务时遇到了超时.

编辑:您需要删除此块:

try
{
    Task.Wait(task1);
}
catch (Exception ex)
{
    this.Log.Error("Failed running the task",ex);
}

Task.Wait确实阻止了你当前的线程.根据MSDN

Task.Wait Method

Waits for the Task to complete execution.

编辑2改为执行此操作

Task task1 = Task.Factory.StartNew(() => this.OriginalFileProcessor.StartPolling()).ContinueWith( t =>
{
     var aggException = t.Exception.Flatten();
     foreach(var ex in aggException.InnerExceptions)
         this.Log.Error("Failed running the task",ex);
},TaskContinuationoptions.OnlyOnFaulted);

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...