После C # 5 введены async
иawait
модель для асинхронного программирования, сообщество C # пришло к соглашению об именах, чтобы добавить суффикс "Async" к методам, возвращающим ожидаемый тип, например так:
interface Foo
{
Task BarAsync();
}
С тех пор было написано, что многие статические анализаторы кода (как на основе Roslyn, так и на основе Roslyn) зависят от этого соглашения об именах при обнаружении запаха кода вокруг асинхронного программирования.
Теперь, когда в C # 8 введена концепция асинхронных перечислимых элементов, которые сами по себе не являются ожидаемыми, но могут использоваться вместе с ними await foreach
, кажется, есть два варианта возврата методов именования IAsyncEnumerable
:
interface Foo
{
// No "Async" suffix, indicating that the return value is not awaitable.
IAsyncEnumerable<T> Bar<T>();
}
или
interface Foo
{
// With "Async" suffix, indicating that the overall logic is asynchronous.
IAsyncEnumerable<T> BarAsync<T>();
}
Существовало ли определенное руководство по соглашению об именах (от группы по языку C #, .NET Foundation или других авторитетов) в отношении описанных выше вариантов, например, как соглашение по именованию C # 5 было однозначно стандартизировано и не оставлено на усмотрение программистов?
Async
суффикс для методов, которые возвращают IAsyncEnumerable
, например, ChannelReader.ReadAllAsync . В других случаях, например в EF Core, AsAsyncEnumerable()
используется уже ясно
async
и используйтеawait
внутри), и пример