C# 所有异常处理时的任务

C# 所有异常处理时的任务,c#,C#,我希望在某些任务可能失败的情况下使用Task.whell,但我仍然需要其他已完成任务的结果数据 根据, 如果提供的任何任务在故障状态下完成,则 返回的任务也将在故障状态下完成,其中 异常将包含未包装数据集的聚合 提供的每个任务的异常 但是,它没有说明的是Task.whall是否仍将在该实例中等待其余任务完成。有人能就这个问题作出澄清吗 如文件所述: 创建将在可枚举集合中的所有任务对象完成时完成的任务 因此,它将等待所有任务完成,而不管任何任务是否已经抛出异常或已被取消。然后,它将聚合可能的取消和

我希望在某些任务可能失败的情况下使用Task.whell,但我仍然需要其他已完成任务的结果数据

根据,

如果提供的任何任务在故障状态下完成,则 返回的任务也将在故障状态下完成,其中 异常将包含未包装数据集的聚合 提供的每个任务的异常


但是,它没有说明的是Task.whall是否仍将在该实例中等待其余任务完成。有人能就这个问题作出澄清吗

如文件所述:

创建将在可枚举集合中的所有任务对象完成时完成的任务


因此,它将等待所有任务完成,而不管任何任务是否已经抛出异常或已被取消。然后,它将聚合可能的取消和异常,并定义其状态。给定任务的结果将出现在原始任务以及异常和取消中

通过将所有任务的主体包装在try-catch块中,并使用适当的数据结构作为任务的结果类型,您可以轻松地处理您的需求,以便了解任务是否失败

举个例子可以帮助你更好地理解我想告诉你的内容

public async static void Main(string[] args)
{
   var task1 = GetIntegerAsync();
   var task2 = GetAnotherIntegerAsync();
   var result = await Task.WhenAll(new[] {task1, task2});

   foreach(var res in results)
   {
     // show a different message depending on res.isFailed
   }
}

private static async Task<(int result, bool isFailed)> GetIntegerAsync()
{
   try
   {
     await Task.Delay(1000).ConfigureAwait(false);
     return (10, false);
   }
   catch(Exception)
   {
     return (default(int), true);
   }
}

private static async Task<(int result, bool isFailed)> GetAnotherIntegerAsync()
{
   try
   {
     await Task.Delay(600).ConfigureAwait(false);
     throw new Exception("Something bad happened...");
   }
   catch(Exception)
   {
     return (default(int), true);
   }
}
public异步静态void Main(字符串[]args)
{
var task1=GetIntegerAsync();
var task2=GetAnotherIntegerAsync();
var result=await Task.WhenAll(new[]{task1,task2});
foreach(结果中的var res)
{
//根据res显示不同的消息。isFailed
}
}
私有静态异步任务GetIntegerAsync()
{
尝试
{
等待任务。延迟(1000)。配置等待(false);
报税表(10,假);
}
捕获(例外)
{
返回值(默认值(int),true);
}
}
专用静态异步任务GetAnotherIntegerAsync()
{
尝试
{
等待任务。延迟(600)。配置等待(false);
抛出新异常(“发生了不好的事情…”);
}
捕获(例外)
{
返回值(默认值(int),true);
}
}

我假设Whenay最终是一个输入错误,因为Whenay自然不会等待,但WhenAll会。只需编写一个带有两个TaskCompletionSource对象的小测试来“感受”它是如何等待的works@SamiKuhmonen是的,谢谢你指出错误。