Jör*_*ann 7 .net c# multithreading windows-services task-parallel-library
我有一个.Net(v4.0)Windows服务应用程序,它在开始时旋转一个tpl任务,执行某些长时间运行的活动,并且基本上在应用程序的生命周期内保持活动状态,因此使用TaskCreationOptions创建.LongRunning参数值.
每当服务停止并且.OnStop()方法被调用时,我.Cancel()我在创建它时移交给工作任务的CancellationToken(Source)我想要它.OnlyOnCanceled(...)继续任务到跑.
问题是,服务/流程关闭而没有继续任务"完全"运行 - 有时它会相当快地退出,有时它会完全运行,有时则不会.
这对我来说有意义,因为该特定任务可能位于另一个线程而不是主线程上,因此无法"阻止"/阻止主要任务结束.
由于我没有在Windows服务应用程序,我不能告诉后续任务在主线程,所以我想知道在那里运行/年的SynchronizationContext:怎么会做呢?
更确切地说,运行tpl任务处理应用程序关闭的最佳实践是什么?
发生这种情况是因为延续任务也是异步运行的。为了阻止它,您需要指定任务继续选项:
...
t.ContinueWith(ct => {...}, TaskContinuationOptions.ExecuteSynchronously);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4032 次 |
| 最近记录: |