我知道我的目标可以通过使用Task.WhenAny()实现,但我不会处理异步等待,如果我可以避免它,以防止死锁。我有以下代码:
try
{
Task.WaitAny(this.Tasks.ToArray());
foreach (var task in this.Tasks)
{
if (task.IsFaulted || task.IsCanceled)
{
if (task.Exception.InnerException is OperationCanceledException)
{
}
}
}
}
catch (OperationCanceledException o)
{
// Handling cancelled tasks
}
catch (Exception e)
{
// Handling faulted tasks
}
我想要确切地知道我的任务的ID,它已经出现故障,或者我的任务的ID被取消了。我试图这样做,如上面的try块所示,但这不是一个解决方案,因为它也会为之前被取消的任务抛出异常。我可以使用Task.WaitAny()获得此问题的解决方案吗?
答案 0 :(得分:4)
来自Task.WaitAny
的{{3}}:
返回值
输入:System.Int32
tasks数组中已完成的Task对象的索引。
所以你可以这样做:
var taskIndex = Task.WaitAny(this.Tasks.ToArray());
var task = this.Tasks[taskIndex];