Я использую шаблон разветвления для выполнения списка задач, которые могут потерпеть неудачу.Поэтому я использую стратегию повтора, чтобы повторить попытку пару раз.Прямо сейчас, если SaveActivity завершается неудачно после последней попытки, он попадает в блок catch, и я теряю выполненные задачи.
Есть ли способ, которым я мог бы отфильтровать задачи, которые потерпели неудачу после последней попытки, а затем перейти к успешному списку?
Можно ли получить попытку повторения в действиичтобы я мог подавить исключение и пометить сущность?
List<Task<AssetSyncResult>> tasks = modeList.
Select(r => context.CallActivityWithRetryAsync<AssetSyncResult>("SaveActivity", new RetryOptions(TimeSpan.FromSeconds(20),3), r)).
ToList();
try{
AssetSyncResult[] syncResults = await Task.WhenAll(tasks);
} catch(Exception e){
//rescue the workflow
}
ОБНОВЛЕНИЕ 1:
Не понимаю, почему проголосовали против?
Получить результаты из Задачи некуда.После восстановления из исключения, сгенерированного Task.WhenAll, элемент управления никогда не попадает в фильтры, которые проверяют состояние задачи.Вот как я изменил код:
try
{
AssetSyncResult[] syncResults = await Task.WhenAll(tasks);
}
catch (System.Exception)
{
}
List<AssetSyncResult> resultsPassed = tasks.Where(r => r.IsCompleted).Select(r => r.Result).ToList();
List<AssetSyncResult> resultsFailed = tasks.Where(r => r.IsFaulted).Select(r => r.Result).ToList();