Ori*_*rds 7 c# exception-handling async-await
我想做这样的事情:
public async Task<int> DoWork(int parameter) {
try {
await OperationThatMayCompleteSynchronously(parameter);
} catch(Exception) e {
if(completedSynchronously)
doSyncThing();
else
doAsyncThing();
}
}
Run Code Online (Sandbox Code Playgroud)
注意:我正在线程池上运行任务,因此没有异步上下文.
我希望能够分辨出立即抛出的异常和我仍然在调用线程上的区别(例如parameter,导致函数中止无效),并且当异步任务完成时抛出异常,并且我' m在其他一些随机回调线程上(例如网络故障)
如果我不使用await,我可以弄清楚如何实现这一点,并且只是ContinueWith在异步操作中使用,但它是否可以使用await?
usr*_*usr 10
将任务存储在变量中:
var task = OperationThatMayCompleteSynchronously(parameter); //may throw
Run Code Online (Sandbox Code Playgroud)
然后等待它:
await task; //may throw
Run Code Online (Sandbox Code Playgroud)
这样,您可以区分潜在异常的两个来源.
请注意,async方法永远不会直接抛出.他们通过他们返回的任务传递异常.即使对于在第一次等待之前执行的"验证"抛出也是如此.
| 归档时间: |
|
| 查看次数: |
193 次 |
| 最近记录: |