我有以下代码:
await _user?.DisposeAsync();
Visual Studio
突出显示此代码,并说“可能的NullReferenceException”
顺便说一句,没有await
Visual Studio
不会显示此警告
为什么NullReferenceException
在这里可行?
答案 0 :(得分:2)
异步方法返回一个可以等待的Task
。如果_user
为null,那么您将不会返回Task
,而是返回null
答案 1 :(得分:1)
await null
将抛出NullReferenceException
。因此,如果_user
为空,则_user?.DisposeAsync()
将返回null
,并且await
将抛出。
您可以这样做:
if (_user != null)
{
await _user.DisposeAsync();
}
(如果两次读取之间可能会发生变化,则可能需要_user
的本地副本)
或:
await _user?.DisposeAsync() ?? Task.CompletedTask;
答案 2 :(得分:0)
正在等待结果。如果_user为null,则结果为null,因此为NullReferenceException。