我在一个类中有一个基本的异步方法,它返回一个对象。
在某些流程中,它可能会失败,我想将其报告回来。
但我只能归还对象。
我尝试了可以为空的对象,但得到了错误:
MyObject必须是不可为空的值类型才能将其用作参数' T'在通用类型或方法中,System.Nullable'
我假设我可以使用异常,但我想在调用函数中使用更简单的东西。
我也无法在异步方法中使用ref
或out
。
有没有办法报告成功或失败的某种真假?
public static async Task<MyObject> getObject()
{
if (NotOkFromSomeReason())
{
//Not sure what to do here
}
return await myDataBase.FindAsync(something);
}
我用它来打电话:
MyObject object = await getObject();
// I want something simple as if(object)...
答案 0 :(得分:5)
如果选择返回null
,您可以执行以下操作:
public static Task<MyObject> getObject()
{
if (NotOkFromSomeReason())
{
return Task.FromResult<MyObject>(null);
}
return myDataBase.FindAsync(something);
}
PS:我假设在此功能中没有其他代码使用await
,因此我已删除async
。否则,您只需使用async
限定符并直接返回null
即可。由于它返回Task
个对象,它仍然可以从外面等待
然后你可以检查外面的null
:
MyObject myObject = await getObject();
if(myObject == null)
{
}
这仅在null
不可能&#34;正确&#34;结果
否则您可以使用例外
答案 1 :(得分:0)
将它包装到另一个将返回所需实例的类中。状态代码 - 如:
public class StatusReport
{
public boolean Ok { get; set; }
public MyObject Instance { get; set; }
}
public static async Task<StatusReport> getObject()
{
if (NotOkForSomeReason())
{
return new StatusReport { Ok = false };
}
return new StatusReport { Ok = true, Instance = await myDataBase.FindAsync(something) };
}