Вызывает ли сброс задачи с ключевым словом discard какие-либо побочные эффекты? - PullRequest
2 голосов
/ 07 октября 2019

Начиная с C # 7, мы можем использовать discard _, чтобы отбросить неиспользуемые переменные. Одна из вещей, для которых я использую это, - в задачах «запускай и забывай».

Рассмотрите этот метод:

public Task Example()
{
    // Do some fire-and-forget stuff.
}

Вы можете запустить и забыть эту задачу, просто не ожидаяtask: Example(), однако это все равно дает вам предупреждение. С ключевым словом discard мы теперь можем использовать: _ = Example(), что избавляет от этого предупреждения. Мне интересно, есть ли у этого неприятные побочные эффекты, о которых я должен знать? (Кроме того, что указано в MSDN: «Это приводит к подавлению исключения, которое выдает операция, когда она собирается завершиться».)

1 Ответ

3 голосов
/ 07 октября 2019

Синтаксис сброса - это просто синтаксический сахар для подавления предупреждения о том, что «возвращаемое значение этого выражения не используется». Эти две строки компилируются в один и тот же IL:

_ = Example();
Example();

Они обе становятся одной и той же call инструкцией.

Поэтому, если Example() работает для вас, то будет _ = Example().

...