Может ли кто-нибудь объяснить, почему асинхронные функции в С # 5 должны иметь хотя бы 1 ожидание? Я не могу найти четкой причины / объяснения.
Под обязательным я подразумеваю, что компилятор предупреждает, когда асинхронная функция не имеет внутри себя вызовов ожидания, но не выдает ошибку компиляции.
Из этого ответа:
Точно так же метод, помеченный как async, должен иметь хотя бы одно ожидание. При ожидании среда выполнения сохранит состояние текущего потока и стек вызовов, выполнит асинхронный вызов и вернется к циклу сообщений среды выполнения, чтобы обработать следующее сообщение и сохранить реакцию приложения. Когда асинхронная операция завершена, при следующей возможности планирования стек вызовов для выполнения асинхронной операции вставляется обратно и продолжается, как если бы вызов был синхронным.
Но из msdn:
Если метод не содержит выражения или оператора ожидания, он выполняется синхронно. Предупреждение компилятора предупреждает вас о любых асинхронных методах, которые не содержат await, потому что такая ситуация может указывать на ошибку.
Какой тип ошибки заслуживает того, чтобы это было предупреждением компилятора, а не просто рекомендуемым использованием?