【发布时间】:2015-09-27 01:38:59
【问题描述】:
我想做这样的事情:
public async Task<int> DoWork(int parameter) {
try {
await OperationThatMayCompleteSynchronously(parameter);
} catch(Exception) e {
if(completedSynchronously)
doSyncThing();
else
doAsyncThing();
}
}
注意:我在线程池上运行任务,所以没有异步上下文。
我希望能够区分立即抛出的异常和我仍在调用线程上(例如 parameter 无效导致函数中止)和异步时抛出的异常任务完成,我在其他一些随机回调线程上(例如网络故障)
如果我不使用await,并且只是在异步操作中使用ContinueWith,我可以计算出如何实现这一点,但是可以使用await吗?
【问题讨论】:
-
请记住,如果
OperationThatMayCompleteSynchronously是异步方法,所有异常都会存储在任务中,不会同步抛出异常
标签: c# exception-handling async-await