Setelah C # 5 memperkenalkan async
dan await
memodelkan untuk pemrograman asinkron, komunitas C # tiba pada konvensi penamaan untuk menambahkan akhiran "Async" ke metode yang mengembalikan tipe yang ditunggu, seperti ini:
interface Foo
{
Task BarAsync();
}
Banyak penganalisa kode statis (baik berbasis Roslyn dan non-Roslyn) sejak itu ditulis bergantung pada konvensi penamaan ini ketika mendeteksi bau kode di sekitar pemrograman asinkron.
Sekarang C # 8 telah memperkenalkan konsep enumerables asynchronous, yang sendiri tidak dapat ditunggu tetapi dapat digunakan bersamaan await foreach
, tampaknya ada dua opsi untuk metode penamaan yang kembali IAsyncEnumerable
:
interface Foo
{
// No "Async" suffix, indicating that the return value is not awaitable.
IAsyncEnumerable<T> Bar<T>();
}
atau
interface Foo
{
// With "Async" suffix, indicating that the overall logic is asynchronous.
IAsyncEnumerable<T> BarAsync<T>();
}
Apakah ada pedoman konvensi penamaan yang definitif (dari tim bahasa C #, .NET Foundation, atau pihak berwenang lainnya) mengenai opsi di atas, seperti bagaimana konvensi penamaan C # 5 distandarisasi dengan jelas dan tidak diserahkan kepada penilaian programmer berdasarkan pendapat?
Async
akhiran untuk metode yang kembali IAsyncEnumerable
, misalnya ChannelReader.ReadAllAsync . Dalam kasus lain, misalnya dalam EF Core, AsAsyncEnumerable()
digunakan yang sudah jelas
async
dan gunakanawait
di dalam), dan sampel