等待null传播System.NullReferenceException

时间:2019-05-30 14:52:59

标签: c# exception async-await nullreferenceexception null-propagation-operator

我有以下代码:

await _user?.DisposeAsync();

Visual Studio突出显示此代码,并说“可能的NullReferenceException”

顺便说一句,没有await Visual Studio不会显示此警告 为什么NullReferenceException在这里可行?

3 个答案:

答案 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。