0Pricing
C# Academy · Pelajaran

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

Pemeriksaan singkat: Mengapa memanggil .Result pada Task async berbahaya dalam konteks UI atau ASP.NET?

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

  1. Task/ValueTask dan mesin status async (konsep)
  2. Jebakan async: sync-over-async dan deadlock
  3. ConfigureAwait, alur pengecualian
← Kembali ke C# Academy