0Pricing
C# Academy · Pelajaran

Task/ValueTask dan mesin status async (konsep)

Pahami hasil Task dan gagasan mesin status async. Tulis metode async kecil, komposisikan await, dan lihat TaskCompletionSource manual.

Task/ValueTask dan mesin status async (konsep) adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.

Model mental

Tujuan: Bangun intuisi tentang async.

  • Task mewakili pekerjaan yang sedang berlangsung dan hasil di masa mendatang
  • await menjeda lalu melanjutkan kembali
  • Kompilator membuat mesin status
  • ValueTask: optimisasi yang lebih baru (hanya konsep di sini)

Dasar metode async

Metode async segera mengembalikan Task<T>; kemudian metode tersebut selesai dengan nilainya setelah pekerjaan yang ditunggu selesai.

using System;
using System.Threading;
using System.Threading.Tasks;

public class Program
{
  // Tiny async method: returns Task<int>
  static async Task<int> GetAnswerAsync()
  {
    // Offload simple work to a thread-pool task (demo only)
    int value = await Task.Run(() =>
    {
      Thread.Sleep(200); // simulate work
      return 42;
    });
    return value; // completes Task<int>
  }

  public static void Main(string[] args)
  {
    // In C# 6, Main cannot be async; block just for demo (console apps are safe here)
    int result = GetAnswerAsync().Result;
    Console.WriteLine("Answer = " + result);
  }
}

Menyusun await

await memungkinkan Anda menulis langkah-langkah async berurutan dengan gaya yang jelas dari atas ke bawah.

using System;
using System.Threading;
using System.Threading.Tasks;

public class Program
{
  static async Task<int> Step1Async()
  {
    // pretend I/O
    await Task.Delay(100);
    return 10;
  }

  static async Task<int> Step2Async(int x)
  {
    await Task.Delay(100);
    return x * 3; // simple transform
  }

  static async Task<int> PipelineAsync()
  {
    int a = await Step1Async();   // await first
    int b = await Step2Async(a);  // then await second
    return a + b;                 // total 10 + 30 = 40
  }

  public static void Main(string[] args)
  {
    int total = PipelineAsync().Result; // block in demo
    Console.WriteLine("Total = " + total);
  }
}

Gagasan mesin status

Konsep: Kompilator mengubah metode async menjadi mesin status.

  • Variabel lokal disimpan sebagai bidang
  • Setiap await menghasilkan status baru
  • Ketika Task yang ditunggu selesai, kelanjutan melanjutkan metode
  • Pengecualian ditangkap dan ditetapkan pada Task

Demo TaskCompletionSource

TaskCompletionSource memungkinkan Anda membuat Task dan menandai penyelesaiannya nanti; await menggunakannya seperti Task lainnya.

using System;
using System.Threading;
using System.Threading.Tasks;

public class Program
{
  // Emulate an async source that completes later
  static Task<string> MakeTaskManually()
  {
    var tcs = new TaskCompletionSource<string>();
    // Complete on a worker after a short delay
    ThreadPool.QueueUserWorkItem(_ =>
    {
      Thread.Sleep(150);
      tcs.SetResult("done");
    });
    return tcs.Task;
  }

  static async Task<string> UseAsyncSource()
  {
    string s = await MakeTaskManually(); // await a Task you created
    return s.ToUpperInvariant();
  }

  public static void Main(string[] args)
  {
    Console.WriteLine(UseAsyncSource().Result);
  }
}

Konsep ValueTask

ValueTask (konsep): tipe pengembalian yang lebih baru dan menghemat alokasi untuk hasil yang sering selesai secara sinkron.

  • Berguna ketika hasil sudah tersedia hampir sepanjang waktu
  • Memiliki aturan untuk menghindari alokasi tambahan
  • Tidak tersedia di C# 6—gunakan Task di sini; gagasannya tetap berlaku

Mesin status async

Pemeriksaan singkat: Apa yang dihasilkan kompiler C# untuk metode async yang menggunakan await?

Ringkasan

Ringkasan: Task memodelkan pekerjaan; await menjeda dan melanjutkan kembali; kompiler membangun mesin status. ValueTask adalah konsep optimisasi (gunakan Task di C# 6).

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Task/ValueTask dan mesin status async (konsep)” gratis?

Ya — teks lengkap “Task/ValueTask dan mesin status async (konsep)” 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 “Task/ValueTask dan mesin status async (konsep)”?

Pahami hasil Task dan gagasan mesin status async. Tulis metode async kecil, komposisikan await, dan lihat TaskCompletionSource manual. 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 1 dari 3.

Berapa lama pelajaran “Task/ValueTask dan mesin status async (konsep)” 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