Я использую Task.WhenAll
для одновременного планирования задач (более или менее, конечно) и хочу перебрасывать все исключения, а не первое, что будет делать Task.WhenAll
. Поэтому я хочу выполнить продолжение всякий раз, когда какое-либо дочернее задание не выполнено или было отменено. Вот что означает NotOnRanToCompletion
, верно?
Ну, это на самом деле работает, но в случае, если все Задачи действительно выполнены, я получаю исключение Задача отменена в продолжении?
var semaphore = new SemaphoreSlim(10);
var tasks = portList.Select(
async port =>
{
try
{
await semaphore.WaitAsync();
await this.AddDeviceAsync(bioprocessDevicesDto, template, port);
}
finally
{
semaphore.Release();
}
});
await Task.WhenAll(tasks).ContinueWith(
t =>
{
// this will make all inner exceptions available
// never null
throw t.Exception;
},
TaskContinuationOptions.NotOnRanToCompletion).ConfigureAwait(false);
![a](https://i.stack.imgur.com/JlUti.png)