0Pricing
C# Academy · Ders

Task/ValueTask ve async durum makinesi (kavramlar)

Task sonuçlarını ve async durum makinesi fikrini anlayın. Küçük async yöntemleri yazın, await'leri birleştirin ve elle oluşturulan bir TaskCompletionSource örneğini görün.

Task/ValueTask ve async durum makinesi (kavramlar), CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 3 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 3 dersten oluşur.

Zihinsel model

Amaç: Asenkron programlama için sezgi geliştirmek.

  • Task, devam eden çalışmayı ve gelecekteki bir sonucu temsil eder
  • await, işlemi duraklatır ve daha sonra devam ettirir
  • Derleyici bir durum makinesi oluşturur
  • ValueTask: daha yeni bir iyileştirme (burada yalnızca kavram olarak ele alınır)

Asenkron yöntem temelleri

Bir async yöntemi hemen Task<T> döndürür; daha sonra, await edilen iş tamamlandığında değerle tamamlanır.

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);
  }
}

Await işlemlerini birleştirme

Await, açık ve yukarıdan aşağıya bir biçimde sıralı asenkron adımlar yazmanıza olanak tanır.

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);
  }
}

Durum makinesi fikri

Kavram: Derleyici, bir async yöntemini durum makinesine dönüştürür.

  • Yerel değişkenler alanlar olarak saklanır
  • Her await yeni bir durum üretir
  • Await edilen Task tamamlandığında bir devam işlemi yöntemi sürdürür
  • Özel durumlar yakalanır ve Task üzerine atanır

TaskCompletionSource gösterimi

TaskCompletionSource, bir Task oluşturmanıza ve tamamlanmasını daha sonra bildirmenize olanak tanır; await bunu diğer tüm Task'ler gibi tüketir.

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);
  }
}

ValueTask kavramı

ValueTask (kavram): sıkça eşzamanlı olarak tamamlanan sonuçlar için bellek ayırmalarını azaltan daha yeni bir dönüş türüdür.

  • Sonuçların çoğu zaman zaten kullanılabilir olduğu durumlarda yararlıdır
  • Ek bellek ayırmalarından kaçınmak için kuralları vardır
  • C# 6'da kullanılamaz—burada Task kullanın; fikirler yine geçerlidir

Asenkron durum makinesi

Hızlı kontrol: await kullanan bir asenkron yöntem için C# derleyicisi ne oluşturur?

Özet

Özet: Task çalışmayı modeller; await işlemi duraklatır ve sürdürür; derleyici bir durum makinesi oluşturur. ValueTask bir iyileştirme kavramıdır (C# 6'da Task kullanın).

Sıkça Sorulan Sorular

“Task/ValueTask ve async durum makinesi (kavramlar)” dersi ücretsiz mi?

Evet — “Task/ValueTask ve async durum makinesi (kavramlar)” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 3 dersten oluşur.

“Task/ValueTask ve async durum makinesi (kavramlar)” dersinde ne öğreneceğim?

Task sonuçlarını ve async durum makinesi fikrini anlayın. Küçük async yöntemleri yazın, await'leri birleştirin ve elle oluşturulan bir TaskCompletionSource örneğini görün. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C# Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 3 dersinin 1. dersidir.

“Task/ValueTask ve async durum makinesi (kavramlar)” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Task/ValueTask ve async durum makinesi (kavramlar)
  2. Async tuzakları: sync-over-async ve kilitlenmeler
  3. ConfigureAwait ve istisna akışı
← C# Academy Sayfasına Dön