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
Ö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
- Task/ValueTask ve async durum makinesi (kavramlar)
- Async tuzakları: sync-over-async ve kilitlenmeler
- ConfigureAwait ve istisna akışı