【发布时间】:2017-02-10 06:41:02
【问题描述】:
我有一个异步任务和一个 Task.Delay(time,token) 里面。我从我的主线程对该方法进行了等待调用。每当取消令牌为真时,它都会破坏我的主线程。我需要处理/避免来自 Task.Delay() 的任何异常。有没有可能?
代码 sn-p:
protected override async Task RunAsync(CancellationToken cancellationToken)
{
await StartHealthMonitorAsync(cancellationToken);
}
private async Task StartWorkAsync(CancellationToken cancellationToken)
{
var delaySpan = TimeSpan.FromMinutes(1);
while (!cancellationToken.IsCancellationRequested)
{
await Task.Delay(delaySpan, cancellationToken);
await someTask.DoWorkAsync(cancellationToken);
}
}
谢谢
【问题讨论】:
-
“我需要处理/避免来自 Task.Delay() 的任何异常” -- 你真的尝试 来处理异常吗? IE。在
await周围放置try/catch?你就是这样做的。如果你不能让它工作,发布一个好的minimal reproducible example 展示你是如何尝试这样做的,并解释到底发生了什么而不是你想要的。 -
我尝试使用 try/catch 来处理。但在将取消令牌作为 true 传递时没有得到异常。
-
@JyothisTS,您能展示一下您是如何尝试使用 try/catch 处理它的吗?
-
Task.Delay将抛出OperationCanceledException以取消任务。这怎么会破坏你的主线程?
标签: c# multithreading exception-handling async-await cancellation-token