Asynchronous programming ใน C# เป็นวิธีที่มีประสิทธิภาพสำหรับกิจกรรมที่ถูกบล็อกหรือล่าช้า หากกิจกรรมถูกบล็อกในกระบวนการ synchronous แอปพลิเคชันทั้งหมดต้องรอ ใช้เวลานาน แอปหยุดตอบสนอง ด้วย asynchronous approach แอปทำงานอื่นต่อไปได้
แอปที่มี GUI ตรวจสอบคิว หากมีงานที่ยังไม่ประมวลผล จะดึงออกมาทำก่อน โค้ดทำงาน synchronous งานที่ยังไม่เสร็จจะเสร็จก่อน แอปจะแสดง "stop responding" ถ้าประมวลผลนานเกินไป
ตัวอย่างปัญหา
private void OnRequestDownload(object sender, RoutedEventArgs e) {
var req = HttpWebRequest.Create(_requestedUri);
var res = req.GetResponse();
}
แก้ไขด้วย async/await
private async void OnRequestDownload(object sender, RoutedEventArgs e) {
var req = HttpWebRequest.Create(_requestedUri);
var res = await req.GetResponseAsync();
}