在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。只是读起来容易一点。