等待空传播 System.NullReferenceException

await with null propagation System.NullReferenceException

我有以下代码:

await _user?.DisposeAsync();

Visual Studio 突出显示此代码,说 'Possible NullReferenceException'

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

await 正在等待结果。如果 _user 为 null,则结果将为 null,因此会出现 NullReferenceException。

异步方法 return 一个可以等待的 Task。如果 _user 为 null 那么您将不会 returning a Task 而是 null

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

你可以这样做:

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

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

或:

await (_user?.DisposeAsync() ?? ValueTask.CompletedTask);

(在 .NET 5 之前,您需要:)

await (_user?.DisposeAsync().AsTask() ?? Task.CompletedTask);