ожидайте с нулевым распространением System.NullReferenceException - PullRequest
0 голосов
/ 30 мая 2019

У меня есть следующий код:

await _user?.DisposeAsync();

Visual Studio выделяет этот код, говоря «Возможное исключение NullReferenceException» * Кстати,

, без await Visual Studio нетпоказать это предупреждение Почему NullReferenceException здесь возможно?

Ответы [ 3 ]

2 голосов
/ 30 мая 2019

Асинхронные методы возвращают Task, который можно ожидать. Если _user равно нулю, вы не вернете Task, но вместо этого будете иметь значение

2 голосов
/ 30 мая 2019

await null бросит NullReferenceException. Поэтому, если _user равно нулю, _user?.DisposeAsync() вернет null, а await сгенерирует.

Вы можете сделать:

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

(вам может понадобиться локальная копия _user, если она может меняться между чтениями)

или

await _user?.DisposeAsync() ?? Task.CompletedTask;
1 голос
/ 30 мая 2019

жду, ждет результата. Если _user равен нулю, то результат будет нулевым, следовательно, исключение NullReferenceException.

...