I mają następujące kodu w Xamarin (testowana ios)Xamarin Wyjątki uzyskane z zadań nie namnaża
private static async Task<string> TaskWithException()
{
return await Task.Factory.StartNew (() => {
throw new Exception ("Booo!");
return "";
});
}
public static async Task<string> RunTask()
{
try
{
return await TaskWithException();
}
catch(Exception ex)
{
Console.WriteLine (ex.ToString());
throw;
}
}
Wywołanie to jako await RunTask()
, czy wyjątek dalej od sposobu TaskWithException
, ale sposób zaczep w RunTask
nigdy nie zostanie trafiony. Dlaczego? Spodziewam się, że haczyk zadziała tak samo, jak w przypadku async/await firmy Microsoft. Czy czegoś brakuje?
Czy używasz '.Result',' Wait' lub 'WaitAll' w dowolnym miejscu kodu, bezpośrednio lub pośrednio odwołując się do zadania zwróconego przez' RunTask'? – Noseratio
Działa to zgodnie z oczekiwaniami w aplikacji konsoli w VS2013. –
Kod został wywołany z konstruktora widoku formularzy Xamarin. Nie sądziłem, że ten szczegół był istotny, ale wygląda na to, że uruchomienie takiego zadania z konstruktora nie uruchamia procedury obsługi wyjątku. – madaboutcode