Задача или задача <TResult> объект является ожидаемым, поэтому мы можем использовать ключ ожидания для тех, чье возвращаемое значение - Task или Task <TResult> . Задача или задача <TResult> являются наиболее часто используемым ожидаемым объектом.
Мы также можем определить наш собственный ожидаемый объект. Объект должен иметь квалификацию ниже.
- Он имеет метод GetAwaiter() (метод экземпляра или метод расширения);
- Метод GetAwaiter() возвращает awaiter. Объект является awaiter
если:
- Он реализует INotifyCompletion или ICriticalNotifyCompletion интерфейс;
- Он имеет IsCompleted, который имеет getter и возвращает логическое значение;
- у него есть метод GetResult(), который возвращает void или результат.
Мой вопрос в том, почему Microsoft не предоставляла интерфейс для ограничения этих ожидаемых объектов? Текущий метод для реализации ожидаемого объекта немного сложнее.