Код: Выделить всё
var cts = new CancellationTokenSource();
try
{
var tasks = new Task[] { DoSomethingAsync(cts.Token), ... } // multiple tasks here
.Select(task => task.ContinueWith(task =>
{
if (task.IsFaulted)
{
cts.Cancel();
}
}));
await Task.WhenAll(tasks).ConfigureAwait(false);
}
catch (SpecificException)
{
// Why is this block never reached?
}
< /code>
Я не уверен, что это лучший способ сделать это, кажется, у него есть некоторые проблемы. Похоже, что исключение будет пойман внутри, код после того, как все всегда достигается. Я не хочу, чтобы код после того, как все было достигнуто На соответствующем примечании я попытался передавать токен отмены, чтобы продолжить как SO: task.continuewith (rambda, cts.token) . Однако, когда возникает исключение в любой задаче, это в конечном итоге вызовет taskcancelexexception вместо исключения, которое мне интересно. Я подумал, что должен передать токен отмены, чтобы продолжить , потому что это отменит продолжение < /код> сам, что я не думаю, что я хочу.
Подробнее здесь: https://stackoverflow.com/questions/423 ... -exception
Мобильная версия