การผสมวิธีการซิงค์และ async มีประสิทธิภาพภายในวิธีการเดียวหรือไม่
โอเคฟังดูแปลก แต่รหัสนั้นง่ายมากและอธิบายสถานการณ์ได้ดี public virtual async Task RemoveFromRoleAsync(AzureTableUser user, string role) { AssertNotDisposed(); var roles = await GetRolesForUser(user); roles.Roles = RemoveRoles(roles.Roles, role); await Run(TableOperation.Replace(roles)); } (ฉันรู้ว่าฉันกำลังพูดถึงในบทคัดย่อด้านล่าง แต่ข้างต้นเป็นวิธีการที่เกิดขึ้นจริงจากสิ่งที่จะเป็นรหัสการผลิตจริงที่ทำในสิ่งที่ฉันถามเกี่ยวกับที่นี่และฉันสนใจในการตรวจสอบจริงของคุณ เพื่อความถูกต้องโปรดดูรูปแบบ async / await) ฉันพบรูปแบบนี้บ่อยขึ้นเรื่อย ๆ ในขณะที่ฉันกำลังใช้async/ awaitมากกว่า รูปแบบประกอบด้วยห่วงโซ่ของเหตุการณ์ต่อไปนี้: รอสายแรกที่ทำให้ฉันได้รับข้อมูลบางอย่างที่ฉันต้องทำ ทำงานกับข้อมูลนั้นพร้อมกัน รอสายสุดท้ายที่บันทึกงานที่อัปเดต โดยทั่วไปโค้ดบล็อกด้านบนเป็นวิธีที่ฉันใช้จัดการวิธีการเหล่านี้ ฉันawaitโทรครั้งแรกซึ่งฉันต้องทำเพราะมันเป็นแบบอะซิงโครนัส ต่อไปฉันทำงานที่ฉันต้องทำซึ่งไม่ใช่ IO หรือทรัพยากรถูกผูกไว้และไม่ใช่ async สุดท้ายผมบันทึกการทำงานของฉันซึ่งยังเป็นผู้asyncโทรเข้าและออกของสินค้าลัทธิผมawaitมัน แต่นี่เป็นวิธีที่มีประสิทธิภาพ / ถูกที่สุดในการจัดการรูปแบบนี้หรือไม่? ดูเหมือนว่าฉันจะสามารถข้ามawaitสายสุดท้ายได้ แต่จะเกิดอะไรขึ้นถ้ามันล้มเหลว …