我有一个服务,其核心是通过调用以下方法来运行一些永无休止的循环:
public async Task DoStuffPeriodically(CancellationToken token);
它们通过调用来调用:
var tokenSource = new CancellationTokenSource();
var stuffTask = DoStuffPeriodically(tokenSource.token);
现在,这将永远运行,并且只有当我们在不同的方法上取消 token 并调用 stuffTask.Wait()
时才会停止。 只有这样我们才会得到 DoStuffPeriodically 可能引发的任何异常。
DoStuffPeriodically 有可能(但不太可能)实际抛出异常,这意味着我所依赖的循环不再运行。我计划通过在主线程中设置一个循环来监视它,该循环定期检查 stuffTask.IsFaulted
并抛出异常(这将强制服务重新启动)。
有更好的方法吗?如果我不知道可以从中获取回调,我不想轮询任务状态。
谢谢!
最佳答案
您可以使用Task.ContinueWith ,将 TaskContinuationOptions.OnlyOnFaulted
传递给 continuationOptions
参数。仅当先行抛出未处理的异常时,才会触发回调。在此回调中,您可以设置一些标志或引发异常。
stuffTask.ContinueWith(t => { throw new Exception(); },
null,
TaskContinuationOptions.OnlyOnFaulted);
关于c# - 如何在 C# 中对永无休止的任务最好地实现看门狗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46252186/