Güvenli bir şekilde C zaman uyumsuz yöntem çağrısı nasıl# bekliyor olmadan
Veri döndürür async
bir yöntem var:
public async Task MyAsyncMethod()
{
// do some stuff async, don't return any data
}
Bazı veri verir: başka bir yöntemle bunu arıyorum
public string GetStringData()
{
MyAsyncMethod(); // this generates a warning and swallows exceptions
return "hello world";
}
Bunu beklemeden MyAsyncMethod()
arama "Because this call is not awaited, the current method continues to run before the call is completed" visual studio uyarı. bir neden Bu uyarı için sayfada Birleşik Devletleri:
Eğer tamamlamak için zaman uyumsuz çağrı ve bunun için beklemek istemediğinden emin misin yoksa sadece uyarı engelleniyor düşünmelisinizaranan yöntem, herhangi bir istisna yetiştirmek istemiyorum.
Tamamlamak için çağrı beklemek istemiyorum eminim; gerek yok ya da zamanı var.Ama aramaolabilirözel durumlar oluşturmak.
Bu sorun, birkaç kez denk geldim ve ortak bir çözüm olması gereken ortak bir sorun olduğuna eminim.
Nasıl güvenli bir şekilde sonucu beklemeden bir zaman uyumsuz yöntem çağrısı mı?
Güncelleme:
İnsanlar sadece sonuç bekliyor önerdiğin için, bu web servisi üzerinde bir web isteği (ASP.NET Web API) yanıt kodu. UI bir bağlamda bekliyor UI iş parçacığı ücretsiz tutar, fakat web arama isteği içinde bekleyen Görev için isteğine yanıt vermeden önce, böylece kez sebepsiz yere tepki artan bitirmek için bekler.
CEVAP
Eğer durum almak istiyorsanız "uyumsuz", yapabilirsin:
MyAsyncMethod().
ContinueWith(t => Console.WriteLine(t.Exception),
TaskContinuationOptions.OnlyOnFaulted);
Bu bir iş parçacığı "" parçacığı. ana dışında bir durum ile başa çıkmak için izin verecektir Bunun anlamı yok "bekle" çağrısıMyAsyncMethod()
konu arama MyAsyncMethod
; ama, yine de size izin verir bir şey yapmak ile bir istisna ... ama yalnızca bir özel durum oluşur.
Güncelleme:
teknik olarak, bir şey await
ile benzer yapabilirsiniz:
try
{
await MyAsyncMethod().ConfigureAwait(false);
}
catch (Exception ex)
{
Trace.WriteLine(ex);
}
...gerekli olan yararlı eğer ihtiyacın özellikle kullanın try
/catch
(using
) ama ben bul ContinueWith
biraz daha açık çünkü bilmen gerekiyor ne ConfigureAwait(false)
anlamına gelir.
C senkron yöntemi zaman uyumsuz yöntem...
Nasıl bir alıcı ya da ayarlayıcı gelen...
nasıl ve zaman uyumsuz kullanmak `ve` ...
Nasıl C zaman Uyumsuz bir Yöntem oluşt...
Nasıl dosyaları zaman uyumsuz olarak y...