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



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



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

612   3  

3 ответов:

async является модификатором для объявления. Похоже на public.

await это операция, которая потребляет асинхронный оператор и что-то с ним делает. Похоже на return.

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

Модификатор применяется к объявлению. Частные, статические, вне, Реф, параметры, изменить ключевые слова, примеры. И асинхронность.

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

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

Давайте рассмотрим определение оператора:

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

Источник: MSDN

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

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

С уважением

Comments

    Ничего не найдено.