ConfigureAwait ve istisna akışı
Bağlam yakalamayı ve ConfigureAwait(false) kullanımını anlayın; await ile engelleme arasındaki istisna yönetimini öğrenin, AggregateException ve en iyi uygulamaları görün.
ConfigureAwait ve istisna akışı, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 3 dersinin 3. 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.
Bağlam ve özel durumlar
Hedefler:
- Bağlam yakalamanın ne olduğunu öğrenin
- ConfigureAwait(false) öğesinin ne zaman kullanılacağını öğrenin
- Özel durumların await ile nasıl aktarıldığını öğrenin
- Engellemenin neden AggregateException ile sonuçlandığını öğrenin
Kitaplıklar için en iyi uygulama
Kitaplık yöntemleri, kendilerine ait olmayan bir kullanıcı arayüzü veya web bağlamında sürdürülmekten kaçınmak için ConfigureAwait(false) kullanmalıdır.
using System;
using System.Threading.Tasks;
public static class NetLib
{
// Library code should not assume a UI context. Use ConfigureAwait(false).
public static async Task<string> FetchAsync()
{
await Task.Delay(100).ConfigureAwait(false); // do not capture context
return "payload";
}
}
public class Program
{
public static void Main(string[] args)
{
// Console apps typically have no SynchronizationContext; this still runs fine.
string s = NetLib.FetchAsync().GetAwaiter().GetResult();
Console.WriteLine("Got: " + s);
}
}
Bağlam kuralları
Bağlam yakalama:
- Varsayılan await, yakalanan bağlamda (kullanıcı arayüzü/ASP.NET) sürdürülmeye çalışır
- ConfigureAwait(false) şunu söyler: bağlamı yakalama, iş parçacığı havuzunda sürdür
- Çağıranlar bağlam iş parçacığını engellediğinde kilitlenmelerden kaçınmaya yardımcı olur
- Kullanıcı arayüzü kodu denetimleri güncellemek için bağlama ihtiyaç duyabilir; kitaplık kodu ise genellikle duymaz
Await ve özel durumlar
Await ettiğinizde özel durum, özgün özel durum türü olarak aktarılır; onu normal şekilde yakalayın.
using System;
using System.Threading.Tasks;
public class Program
{
static async Task<string> BoomAsync()
{
await Task.Delay(50);
throw new InvalidOperationException("boom");
}
public static void Main(string[] args)
{
// With await (inside async), exceptions rethrow as the original type.
try
{
string r = BoomAsync().GetAwaiter().GetResult(); // emulate await in Main
Console.WriteLine(r);
}
catch (InvalidOperationException ex)
{
Console.WriteLine("Caught: " + ex.GetType().Name + " - " + ex.Message);
}
}
}
Engelleme ve hatalar
.Result veya .Wait() ile engelleme, hataları AggregateException içine sarar; daha açık bir hata akışı için await kullanmayı tercih edin.
using System;
using System.Threading.Tasks;
public class Program
{
static async Task<int> FailsAsync()
{
await Task.Delay(30);
throw new ArgumentException("bad arg");
}
public static void Main(string[] args)
{
try
{
// Blocking with .Result wraps the exception into AggregateException
int x = FailsAsync().Result;
Console.WriteLine(x);
}
catch (AggregateException ae)
{
Exception inner = ae.InnerException;
Console.WriteLine("AggregateException -> " + (inner == null ? "null" : inner.GetType().Name));
}
}
}
En iyi uygulamalar
Yönergeler:
- Kitaplıklarda: ConfigureAwait(false) kullanın
- Kullanıcı arayüzü/web kodunda: bağlama ihtiyaç duyduğunuzda çağıran iş parçacığında await edin
- .Result/.Wait() kullanmaktan kaçının; await ile özgün özel durumları yakalayın
- Gerekirse günlük kaydı oluşturun ve bağlama duyarlı mesajlarla yeniden fırlatın
ConfigureAwait davranışı
Özet
Özet: Kitaplıklarda ConfigureAwait(false) kullanın; kullanıcı arayüzü/web kodunun bağlama ne zaman ihtiyaç duyduğuna kendisinin karar vermesine izin verin. Açık bir özel durum akışı için await kullanmayı tercih edin; engelleme hataları sarar ve kilitlenme riski oluşturur.
Sıkça Sorulan Sorular
“ConfigureAwait ve istisna akışı” dersi ücretsiz mi?
Evet — “ConfigureAwait ve istisna akışı” 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.
“ConfigureAwait ve istisna akışı” dersinde ne öğreneceğim?
Bağlam yakalamayı ve ConfigureAwait(false) kullanımını anlayın; await ile engelleme arasındaki istisna yönetimini öğrenin, AggregateException ve en iyi uygulamaları 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 3. dersidir.
“ConfigureAwait ve istisna akışı” 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ışı