Ho il seguente codice nella Xamarin (testato in iOS):Xamarin: Le eccezioni sollevate da compiti non vengono propagate
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;
}
}
Invocare questo come await RunTask()
, non generare l'eccezione dal metodo TaskWithException
, ma il metodo di cattura in RunTask
non viene mai colpito. Perché? Mi aspetto che il catch funzioni come nell'esecuzione di async/await di Microsoft. Mi sto perdendo qualcosa?
Utilizzate '.Result',' Wait' o 'WaitAll' in qualsiasi punto del codice, facendo riferimento direttamente o indirettamente all'attività restituita da' RunTask'? – Noseratio
Funziona come previsto in un'app console in VS2013. –
Il codice è stato chiamato dal costruttore di una vista Form Xamarin. Non pensavo che il dettaglio fosse rilevante, ma sembra che avviare un'attività come questa dal costruttore non attivi il gestore delle eccezioni. – madaboutcode