-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,因爲它是沒有必要的。