我正在使用扇出模式来执行可能失败的任务列表。所以我使用重试策略重试几次。现在,如果 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();