Temel olarak, C# 'de, await
anahtar sözcüğü aracılığıyla beklemede olan eşzamansız yöntemlerden özel durumları yakalamak için merak ediyorum. Örneğin, en önemlisi AwaitSync
adı verilen bir yöntemi içeren aşağıdaki küçük konsol programını düşünün. AwaitSync
, yürütüldüğünde bir istisna atar bir Görev döndüren TestAsync
çağırır. Özel durumu AwaitAsync
, 'da yakalamaya çalışıyorum ancak işlenmemiş olan. C# beklenen bir eşzamanlı olmayan yöntemden bir istisnayı nasıl yakalarım?
class Program
{
static void Main(string[] args)
{
AwaitAsync();
Console.ReadKey();
}
static async Task AwaitAsync()
{
try
{
await TestAsync();
}
catch (Exception)
{
Console.WriteLine("Exception caught");
}
}
static Task TestAsync()
{
return Task.Factory.StartNew(() => { throw new Exception("Test"); });
}
}
nasıl
BenTestAsync
tarafından döndürülen Görev den istisna yakalayabilir ki? Bu örnek bir konsol programı olsa da, gerçek hayattaki sorunum ASP.NET MVC/Web API'sinin kapsamındadır.
DÜZENLEME: istisna terminali kapanmadan önce ben sadece 'İstisna yakalandı' mesajı fark etmedi teknik nedenlerden dolayı, yakalanmaktir çıkıyor. Her durumda, Jon Skeet'in cevabı, await
anlayışım ve istisna işleme konusunda çok değerliydi.
Bunun çalışmadığını mı söylüyorsunuz? – jishi
Kodunuzu çalıştırdığımda, "İstisna yakalandı" ifadesini görüyorum. – spender
Bu benim için yakalanmaz. Tekrar kontrol edeceğim. – aknuds1