在C#中检查Task.WhenAll()的空结果的最佳位置是哪里?

在C#中检查Task.WhenAll()的空结果的最佳位置是哪里?,c#,asp.net,asp.net-core,C#,Asp.net,Asp.net Core,我开始看别人的代码,需要一些关于Task.WhenAll()使用的建议 我们有以下简化代码: taskt1=Task.Factory.StartNew(LoadClass1); Task t2=Task.Factory.StartNew(LoadClass2); Task t3=Task.Factory.StartNew(LoadClass3); var tasks=新任务[]{t1,t2,t3}; LoadClass1/2/3方法是对服务的API调用,用于获取一些数据 Task loadAl

我开始看别人的代码,需要一些关于
Task.WhenAll()
使用的建议

我们有以下简化代码:

taskt1=Task.Factory.StartNew(LoadClass1);
Task t2=Task.Factory.StartNew(LoadClass2);
Task t3=Task.Factory.StartNew(LoadClass3);
var tasks=新任务[]{t1,t2,t3};
LoadClass1/2/3方法是对服务的API调用,用于获取一些数据

Task loadAllDataTask=Task.WhenAll(任务);
尝试
{
等待loadAllDataTask;
_ClassResult=t1.结果;
_class2Result=t2.结果;
_class3Result=t3.结果;
}
捕获(例外)
{
if(loadAllDataTask.Exception!=null)
{
抛出loadAllDataTask.Exception;
}
}
我试图解决的问题是API服务何时关闭。等待任务,如果任务端点之一
t3
关闭,则返回500错误。任务不会失败,但返回空值

然后,LoadClass3方法中出现了
NullReference
异常,因为它只是分配API调用的
.Result
并将其返回

现在在这个例子中,它很小,但我有大约15个任务要做。是否有一种方法可以处理
任务中任何任务结果的空值异常。whalll
?我是否可以简单地为每个任务执行以下操作:

\u classresult=t1.结果??抛出新异常();
把所有的任务都总结一下


如果
任务
的结果为
,并且任务未失败,则为所有建议喝彩

,这是有效的结果。这没什么错。 如果对您来说,
null
不是预期的结果,您可以使用task或wrap task为该函数内部添加检查。或者甚至将您的任务包装到将执行检查的另一个任务中

大概是这样的:

taskt1=Task.Factory.StartNew(NullCheck(LoadClass1));
...
异步任务空检查(任务)
{
T taskResult=等待任务;
_=taskResult??抛出新的InvalidOperationException(“结果不能为null”);
返回任务结果;
}

您是否检查了t1.IsFaulted以查找返回null的任务?是的,您使用了该选项,并且在调用方法中再次使用了该选项。感谢您的回复。我做了类似的工作,将loadclass1、loadclass 2等放在一个通用方法中,并围绕结果在其中包装了一个try-catch。只是读起来容易一点。