Sau khi C # 5 giới thiệu async
và await
mô hình cho lập trình không đồng bộ, cộng đồng C # đã đến một quy ước đặt tên để thêm hậu tố "Async" cho các phương thức trả về loại được chờ đợi, như sau:
interface Foo
{
Task BarAsync();
}
Nhiều máy phân tích mã tĩnh (cả dựa trên Roslyn và không dựa trên Roslyn) đã được viết để phụ thuộc vào quy ước đặt tên này khi phát hiện mùi mã xung quanh lập trình không đồng bộ.
Bây giờ, C # 8 đã đưa ra khái niệm về liệt kê không đồng bộ, bản thân chúng không được chờ đợi nhưng có thể được sử dụng cùng với await foreach
, dường như có hai tùy chọn để trả về các phương thức đặt tên IAsyncEnumerable
:
interface Foo
{
// No "Async" suffix, indicating that the return value is not awaitable.
IAsyncEnumerable<T> Bar<T>();
}
hoặc là
interface Foo
{
// With "Async" suffix, indicating that the overall logic is asynchronous.
IAsyncEnumerable<T> BarAsync<T>();
}
Đã có một hướng dẫn quy ước đặt tên dứt khoát (từ nhóm ngôn ngữ C #, .NET Foundation hoặc các cơ quan khác) về các lựa chọn ở trên, như cách quy ước đặt tên C # 5 được chuẩn hóa rõ ràng và không để lại sự phán xét dựa trên ý kiến của các lập trình viên?
Async
hậu tố cho các phương thức trả về IAsyncEnumerable
, ví dụ ChannelReader.ReadAllAsync . Trong các trường hợp khác, ví dụ như trong EF Core, AsAsyncEnumerable()
được sử dụng đã rõ ràng
async
và sử dụngawait
bên trong) và mẫu