-1

У меня есть задача async и 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_ обрабатывали исключение? То есть ставить try/catch вокруг 'await'? Вот как вы это делаете. Если вы не можете заставить это работать, опубликуйте хороший [mcve], показывающий, как вы пытались это сделать, и объясните, что именно происходит, а не то, что вы хотите. –

+0

Я попытался справиться с try/catch. но не получая исключения при передаче токена отмены как истинного. –

+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, так как это не является необходимым.

 Смежные вопросы

  • Нет связанных вопросов^_^