8

我有以下代码:

await _user?.DisposeAsync();

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

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

4

3 回答 3

11

await null会抛出一个NullReferenceException. 因此,如果_user为空,则_user?.DisposeAsync()返回null,并且await将抛出。

你可以做:

if (_user != null)
{
    await _user.DisposeAsync();
}

_user如果它可能在读取之间发生变化,您可能需要一个本地副本)

或者:

await _user?.DisposeAsync().AsTask() ?? Task.CompletedTask;
于 2019-05-30T14:56:07.397 回答
3

异步方法返回一个Task可以等待的。如果_user为 null 那么您将不会返回 aTask但为 null

于 2019-05-30T14:55:49.463 回答
2

await 期待一个结果。如果 _user 为 null,则结果将为 null,因此会出现 NullReferenceException。

于 2019-05-30T14:55:40.747 回答