我有一个
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);
原文地址:https://www.jb51.cc/csharp/91551.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。