我在Xamarin中有以下代码(在ios中测试):
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;
}
}
将此调用为await RunTask()
,会从TaskWithException
方法抛出异常,但RunTask
中的catch方法永远不会被命中。这是为什么?我希望捕获工作就像在Microsoft的async / await实现中一样。我错过了什么吗?
答案 0 :(得分:6)
你不能await
constructor
内的方法,这就是为什么你无法抓住Exception
。
要抓住Exception
,您必须await
操作。
我有两种方法从构造函数中调用异步方法:
1。 ContinueWith
解决方案
RunTask().ContinueWith((result) =>
{
if (result.IsFaulted)
{
var exp = result.Exception;
}
});
2。 Xamarin表格
Device.BeginInvokeOnMainThread(async () =>
{
try
{
await RunTask();
}
catch (Exception ex)
{
Console.WriteLine (ex.ToString());
}
});
3。 iOS
InvokeOnMainThread(async () =>
{
try
{
await RunTask();
}
catch (Exception ex)
{
Console.WriteLine (ex.ToString());
}
});