-1

我有一个异步任务和一个Task.Delay(时间,标记)。我从主线程中对该方法进行了等待调用。无论何时取消标记为真,其中断我的主线程。我需要处理/避免Task.Delay()中的任何异常。有没有可能?抑制来自Task.Delay()的异常

代码片段:

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); 
     } 
    } 

感谢

+1

_“我需要处理/避免任何来自Task.Delay()的异常”__ - 您是否实际上_try_处理异常?即在“await”周围放置try/catch?这就是你如何做到的。如果你无法做到这一点,请发布一个很好的[mcve],展示你如何尝试去做,并解释发生了什么,而不是你想要的。 –

+0

我试着用try/catch来处理。但在将取消标记传递为true时不会收到异常。 –

+1

@JyothisTS,你能告诉我你是如何试图用try/catch来处理它的吗? –

回答

1

我需要从Task.Delay处理/避免任何异常()。有没有可能?

是的。使用catch

protected override async Task RunAsync(CancellationToken cancellationToken) 
{ 
    await StartWorkAsync(cancellationToken); 
} 

private async Task StartWorkAsync(CancellationToken cancellationToken) 
{ 
    var delaySpan = TimeSpan.FromMinutes(1); 
    try 
    { 
    while (true) 
    { 
     await Task.Delay(delaySpan, cancellationToken); 
     await someTask.DoWorkAsync(cancellationToken); 
    } 
    } 
    catch (OperationCanceledException) 
    { 
    } 
} 

我也去掉了多余的检查IsCancellationRequested,因为它是没有必要的。