Запуск нескольких задач параллельно.Как узнать причину исключения TaskCancelledException? - PullRequest
0 голосов
/ 11 октября 2018

Вот мой код:

            foreach (var batch in listOfBatches)
            {
                var baseTask = Task.Run(() => GetResult(batch));

                backgroundTasks.Add(baseTask);
            }

            var combinedTask = Task.WhenAll(backgroundTasks);
            var selections = combinedTask.ContinueWith(task => task.Result.SelectMany(x => x).ToList(),
                TaskContinuationOptions.OnlyOnRanToCompletion);

            return selections.Result;

GetResult иногда выдает исключение для одного из пакетов.В этом случае я хочу, чтобы пользователь видел, каково действительное исключение, выданное GetResult.Тем не менее, выходные данные не фактическое исключение, а скорее TaskCancelledException.Как извлечь исключение, генерируемое GetResult, чтобы пользователь мог его увидеть?

1 Ответ

0 голосов
/ 11 октября 2018

Не используйте ContinueWith, чтобы добавить продолжения к задачам.Используйте await.Среди прочего, он имеет гораздо более интуитивную семантику обработки ошибок.Если вы await вернули задачу WhenAll, задача текущего метода будет помечена как сбойная и будет представлять первую ошибку в задачах, которые вы передали WhenAll.

...