我有几个长时间运行的Task对象。我希望他们都能无限期地继续奔跑。其中一项任务的工作是自我监控系统。如果在正常操作条件之外发生了某些事情,我希望它能够停止运行并以某种方式发出其他任务的信号以停止运行。仅使用Task.WaitAny()就足够了,停止一个线程而其他线程将停止,或者其他任务是否会无限期地继续运行?
答案 0 :(得分:3)
除非您明确处理取消,否则这些任务将继续运行。
处理此问题的首选方法是在.NET 4中使用新的cooperative cancellation support。
常规方法是在任务失败/出现故障时运行的每个任务都有一个延续。然后它可能会被CancelationTokenSource
取消。每个任务都可以偶尔检查是否应该中止,因为请求取消。