หลังจาก 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
ภายใน) และตัวอย่าง