use*_*595 31 .net c# async-await
我的代码中有以下重复出现的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
}
}
Run Code Online (Sandbox Code Playgroud)
我想写的是以下内容.
async private void doGetContacts()
{
currentContacts = await orionProxy.CheckForException(orionProxy.GetContacts ());
ShowContacts (); // do something after task is complete but shouldn't run on exception
}
Run Code Online (Sandbox Code Playgroud)
任何指针/建议?我尝试过各种形式的Actions/Tasks/Lambdas,但是没有什么能在orionProxy.CheckForException(?)中正确捕获异常,因此ShowContacts不会运行.
Ste*_*ary 51
我不明白为什么它不起作用,假设GetContacts是一种async方法:
public async Task<T> CheckForExceptionAsync<T>(Task<T> source)
{
try
{
return await source;
}
catch (Exception ex)
{
HandleException(ex);
return default(T);
}
}
Run Code Online (Sandbox Code Playgroud)
另外,您应该避免async void(正如我在MSDN文章中所述)并使用后缀结束您的async方法名称Async.