【发布时间】:2020-09-17 06:33:33
【问题描述】:
在挖掘一些旧代码时,我注意到一个对 asyncmethod 的调用,然后检查返回的任务是否为 null。
async Task<Something> DoSomeStuffAsync()
{
//...
return null; //not the actual return, but I guess it doesn't matter
}
var result = DoSomeStuffAsync(); //without await
if(result == null)
{
//does this part makes any sense
}
根据我对async 关键字的理解,这种情况永远不可能发生,因为async 方法的结果将始终包装在Task 中,但只是为了检查一下,我是否遗漏了什么?
在 C# 中 async 方法是否会返回 null?
【问题讨论】:
-
你测试过吗?如果是这样,您的测试结果是什么导致了这个问题?
-
是的,这听起来很简单,编写单元测试就是手指训练——你完成了 90% 的工作。从字面上看,确实花了更多时间输入编写测试所需的这个问题。
-
我测试过,它不返回null
-
这个问题并不是专门针对我的情况,而是任何人都应该检查 null 异步方法吗?
-
async不是合同的一部分(签名)。如果实现者更改了实现以直接管理返回的Task(删除了async关键字)并以某种方式引入了null结果,那么您认为它不能返回null的假设是不正确的。不要假设实现将使用编译器生成的状态机。
标签: c# .net-core async-await task