Я следующий фрагмент кода:Что такое использование Отмена маркера здесь
using (var cancelSource = new CancellationTokenSource())
{
Task[] tasks = null;
var cancelToken = cancelSource.Token;
tasks = new[]
{
Task.Run(async() => await ThrowAfterAsync("C", cancelToken, 1000)) //<---
};
await Task.Delay(howLongSecs * 1000); // <---
cancelSource.Cancel();
await Task.WhenAll(tasks);
}
Где ThrowAfterAsync
есть это:
private async Task ThrowAfterAsync(string taskId, CancellationToken cancelToken, int afterMs)
{
await Task.Delay(afterMs, cancelToken);
var msg = $"{taskId} throwing after {afterMs}ms";
Console.WriteLine(msg);
throw new ApplicationException(msg);
}
Resharper предлагает, что я могу использовать перегрузку Task.Run()
с маркером отмены:
Task.Run(async() => await ThrowAfterAsync("C", cancelToken, 1000), cancelToken)
Но почему? В чем преимущество этого в первой версии, без маркера отмены в качестве параметра?
Ваш «кусок кода» кажется, что у него есть некоторые ошибки; что произойдет первым, броском или отменой? –
Кроме того, вам не нужно принимать все советы, которые дает вам Resharper. Я часто этого не делаю. –
В моем коде есть блок try/catch, который я только что удалил. –