Jebakan async: sync-over-async dan deadlock
Kenali jebakan async seperti sync-over-async dan deadlock. Pelajari mengapa pemanggilan yang memblokir dapat membekukan aplikasi dan cara menghindari jebakan umum.
Jebakan async: sync-over-async dan deadlock adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 3 pelajaran total.
Ikhtisar jebakan
Jebakan: Async memudahkan penulisan kode, tetapi mencampur operasi sinkron dan async dapat membekukan aplikasi atau menyebabkan kebuntuan.
Sinkronisasi di atas async
Memanggil .Result pada Task memblokir utas. Dalam aplikasi konsol hal ini mungkin berjalan, tetapi dalam konteks UI/ASP.NET terdapat risiko kebuntuan.
using System;
using System.Threading.Tasks;
public class Program
{
static async Task<string> SayHelloAsync()
{
await Task.Delay(200); // simulate async delay
return "Hello";
}
public static void Main(string[] args)
{
// BAD: calling .Result blocks the thread
string msg = SayHelloAsync().Result;
Console.WriteLine(msg);
}
}
Penyelesaian yang lebih aman
Dalam demo konsol Anda dapat memblokir dengan hati-hati. Dalam aplikasi nyata, utamakan async di seluruh jalur: tandai metode sebagai async dan gunakan await, bukan .Result.
using System;
using System.Threading.Tasks;
public class Program
{
static async Task<string> SayHelloAsync()
{
await Task.Delay(200);
return "Hello async";
}
public static void Main(string[] args)
{
// In C# 6, Main is sync; avoid blocking in real apps
string msg = SayHelloAsync().GetAwaiter().GetResult(); // safer than .Result
Console.WriteLine(msg);
}
}
Mekanisme kebuntuan
Rangkaian kebuntuan:
- Utas memblokir pada Task.Result
- Kelanjutan memerlukan utas yang sama
- Kelanjutan tidak pernah berjalan
- Hasil tidak pernah tiba — kebuntuan
Masalah Wait()
.Wait() adalah panggilan blocking lain yang dapat menyebabkan masalah yang sama seperti .Result.
using System;
using System.Threading.Tasks;
public class Program
{
static async Task<string> WorkAsync()
{
await Task.Delay(100);
return "done";
}
public static void Main(string[] args)
{
// BAD: Wait() can also deadlock in UI/ASP.NET
WorkAsync().Wait();
Console.WriteLine("Completed");
}
}
Praktik terbaik
Pedoman:
- Hindari mencampur operasi sinkron dan async
- Gunakan async/await di seluruh tumpukan pemanggilan
- Lakukan blocking hanya dalam aplikasi demo konsol
- Dalam aplikasi UI atau web, jangan pernah memanggil .Result atau .Wait()
Risiko kebuntuan Result
Ringkasan
Ringkasan: Memblokir Task async dengan .Result atau .Wait() dapat menyebabkan kebuntuan. Utamakan async/await di seluruh jalur.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Jebakan async: sync-over-async dan deadlock” gratis?
Ya — teks lengkap “Jebakan async: sync-over-async dan deadlock” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 3 pelajaran total.
Apa yang akan aku pelajari di “Jebakan async: sync-over-async dan deadlock”?
Kenali jebakan async seperti sync-over-async dan deadlock. Pelajari mengapa pemanggilan yang memblokir dapat membekukan aplikasi dan cara menghindari jebakan umum. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C# Academy?
Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 3.
Berapa lama pelajaran “Jebakan async: sync-over-async dan deadlock” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?
Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Task/ValueTask dan mesin status async (konsep)
- Jebakan async: sync-over-async dan deadlock
- ConfigureAwait, alur pengecualian