Подтвердить что ты не робот

Почему ключевое слово С# 5.0 ожидания указано как оператор, а не модификатор?

В библиотеке MSDN указано ключевое слово await в качестве оператора. Мне это кажется странным - я бы подумал, что это модификатор, например ключевое слово async.

Почему это оператор?

4b9b3361

Ответ 1

async является модификатором объявления. Аналогично public.

await - это операция, которая использует асинхронный оператор и что-то делает с ним. Аналогично return.

await не изменяет то, что помещается после него, но вместо этого указывает, как обрабатывается эта операция. Напротив, async фактически ничего не модифицирует, он просто отмечает, что конкретный метод находится в стиле async (это возможный await, который выполняет все изменения в структуре методов с синтаксической точки зрения).

Ответ 2

Модификатор применяется к объявлению. Примером этого могут быть частные, статические, вне, ref, params, override keywords. И асинхронный.

Оператор применяется к выражению и преобразует результат выражения. То, что вы пишете справа от ожидания, называется выражением "ожидание". Таким образом, это унитарный оператор.

Ответ 3

Хорошо, я считаю, что мы все согласны с тем, что оператор есть. Я говорил, что ключевым понятием для определения его как оператора было то, что он меняет тип данных результата, но это не все верно.

Посмотрим на определение оператора:

С# предоставляет большой набор операторов, которые являются символами, которые указывают какие операции выполнять в выражении

Источник: MSDN

Итак, как указал Гуванте, у нас есть выражение, обозначенное type identifier = await asyncMethod() (в основном это похоже, вы знаете). И await действительно выполняет операцию над этим выражением. Он обрабатывает ожидание и преобразование из TaskResult в ожидаемый тип и т.д.

Как я уже сказал, я согласен с другими 2 ответами (Guvante и Hans Passant), я просто подумал, что эта маленькая концепция тоже может помочь.

Привет