我的代码中有以下重复出现的try / catch模式。使用try / catch块来处理在orionProxy中调用方法时抛出的任何异常。
async private void doGetContacts()
{
try {
currentContacts = await orionProxy.GetContacts (); // call method in orionProxy
ShowContacts (); // do something after task is complete
}
catch (Exception e) {
orionProxy.HandleException (e); // handle thrown exception
}
}
我想写的内容如下:
async private void doGetContacts()
{
currentContacts = await orionProxy.CheckForException(orionProxy.GetContacts ());
ShowContacts (); // do something after task is complete but shouldn't run on exception
}
任何指针/建议?我尝试了各种形式的Actions / Tasks / Lambdas,但没有什么能正确捕获orionProxy.CheckForException(?)中的异常,因此ShowContacts不会运行。
答案 0 :(得分:51)
我不明白为什么它不起作用,假设GetContacts
是async
方法:
public async Task<T> CheckForExceptionAsync<T>(Task<T> source)
{
try
{
return await source;
}
catch (Exception ex)
{
HandleException(ex);
return default(T);
}
}
在旁注中,您应该avoid async void
(正如我在MSDN文章中所述)和end your async
method names with the Async
suffix。