Повторная попытка списка неудачных задач

Я пытаюсь создать функцию, которая обрабатывает логику повтора для списка private async Task < List < T > CompleteOperationsWithRetry < T > ( Список < Задача > toComplete , int maxRetries ) { var completedTasks = new Список < Задача > ( ); var failedTasks = новый Список < Задача > (); Ожидание задачи . WhenAll ( toComplete , ToArray ()); foreach ( задача var в toComplete ) { // если задача не завершилась, добавьте в неудачный список if (! task . IsCompleted ) { failedTasks . Добавить ( задание ); продолжить ; } // добавление задачи в соответствующий список в зависимости от того, была ли выполнена неудачная команда var list = task . IsFaulted ? failedTasks : completedTasks ; список . Добавить ( задание ); } toComplete = failedTasks ; // Желательно: повторить код выше, а toComplete не пуст // ... в конечном итоге вернуть завершенные задачи return completedTasks ; } s, когда не все пропуски toCompletes. Функция в настоящее время выглядит следующим образом:

failedTasks

Я хочу выполнить итерацию Task.WhenAll()и добавить в Task.Runсписок какие-либо неудачные задачи , которые затем я хочу снова запустить с вызовом функции, подобным Taskснова. Тем не менее, я прочитал, что как только Задача находится в завершенном состоянии, ее нельзя повторно запустить. Как создать новую задачу из существующей неудачной задачи, чтобы я мог ее повторно запустить?

c#,task,

-1

Ответов: 1


0

Taskна самом деле не знает, как это началось. Это просто объект, который содержит состояние завершения чего-то .

Это «что-то» не обязательно является фоновой задачей, которую вы начали с передачи делегата TaskCompletionSource. Это может быть что-то другое. Вы можете создавать произвольные Taskэкземпляры и управлять, когда они становятся помеченными как завершенные / ошибочные / отмененные (см. Task).

Таким образом, нет никакого способа сделать это с помощью Taskодного. Вам нужно будет создать свой собственный объект, который знает, как запустить каждую задачу, и передать это, и попросить его перезапустить.

C #, задача,
Похожие вопросы