async
- это подробность реализации конкретного метода, в котором он появляется. Несмотря на то, где он появляется, он не является частью сигнатуры метода. (По этой же причине вам не разрешено async
в интерфейсах 1 - потому что они не имеют реализации и не являются частью сигнатуры метода).
То есть любой виртуальный метод возврата Task
может иметь реализации override
в дочерних классах, которые не используют / не используют async
, и не имеет значения, как был помечен исходный базовый метод.
Как показывает FCin , вполне возможно, что синхронный метод будет по-прежнему возвращать Task
, который вы хотите использовать в качестве возвращаемого типа для метода.
1 Игнорирование новомодных реализаций по умолчанию для интерфейсов.