Ошибка С# с нулевым условным оператором и ожидание

Я испытываю интересное исключение System.NullReferenceException, используя новый оператор с нулевым условием в С#. Следующий код дает мне исключение NullReferenceException, если "MyObject" имеет значение null:

await this.MyObject?.MyMethod()

Я бы предположил, что вызов "MyMethod" просто не будет выполнен, если "MyObject" равен NULL, или я не понимаю цели оператора с нулевым условием?

Ответ 1

Вы можете добавить ?? Operator, поэтому, если ?. возвращает нулевую задачу, используйте CompletedTask.

await (this.MyObject?.MyMethod() ?? Task.CompletedTask)

Я бы ожидал, что вызов "MyMethod" просто не будет выполнен, если "MyObject" имеет значение null.

Это правда. оператор ?. возвращает нулевую задачу вместо вызова MyMethod. исключение нулевой ссылки сделано потому, что вы не можете ждать нулевой задачи. Задача должна быть инициализирована.