Po tym, jak C # 5 wprowadził model async
i await
programowanie asynchroniczne, społeczność C # doszła do konwencji nazewnictwa, aby dodać sufiks „Async” do metod zwracających oczekiwany typ, taki jak ten:
interface Foo
{
Task BarAsync();
}
Od tego czasu napisano wiele analizatorów kodu statycznego (zarówno opartych na Roslyn, jak i innych), aby polegały na tej konwencji nazewnictwa podczas wykrywania zapachu kodu wokół programowania asynchronicznego.
Teraz, gdy C # 8 wprowadził koncepcję asynchronicznych wyliczeń, które same w sobie nie są oczekiwane, ale mogą być używane w połączeniu z await foreach
, wydaje się, że istnieją dwie opcje zwracania metod nazewnictwa IAsyncEnumerable
:
interface Foo
{
// No "Async" suffix, indicating that the return value is not awaitable.
IAsyncEnumerable<T> Bar<T>();
}
lub
interface Foo
{
// With "Async" suffix, indicating that the overall logic is asynchronous.
IAsyncEnumerable<T> BarAsync<T>();
}
Czy istnieje ostateczna wytyczna dotycząca konwencji nazewnictwa (od zespołu językowego C #, .NET Foundation lub innych organów) dotycząca powyższych opcji, na przykład w jaki sposób konwencja nazewnictwa C # 5 została jednoznacznie ujednolicona i nie została pozostawiona do oceny programistów na podstawie opinii?
Async
sufiksu dla metod, które zwracają IAsyncEnumerable
, np . ChannelReader.ReadAllAsync . W innych przypadkach, np. W EF Core, AsAsyncEnumerable()
który jest już jasny
async
i użyjawait
wewnątrz), a próbka msdn pokazuje to samo