加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 异步等待异常捕获 – 我在哪个线程?

发布时间:2020-12-15 07:57:01 所属栏目:百科 来源:网络整理
导读:我想做这样的事情: public async Taskint DoWork(int parameter) { try { await OperationThatMayCompleteSynchronously(parameter); } catch(Exception) e { if(completedSynchronously) doSyncThing(); else doAsyncThing(); }} 注意:我正在线程池上运行
我想做这样的事情:
public async Task<int> DoWork(int parameter) {
    try {
        await OperationThatMayCompleteSynchronously(parameter);
    } catch(Exception) e { 
        if(completedSynchronously)
           doSyncThing();
        else
           doAsyncThing();
    }
}

注意:我正在线程池上运行任务,因此没有异步上下文.

我希望能够分辨出立即抛出的异常和我仍然在调用线程上的区别(例如参数无效导致函数中止),并且当异步任务完成时抛出异常,并且我我在一些其他随机回调线程(例如网络故障)

如果我没有使用await,我可以解决如何实现这一点,并且在异步操作中使用了ContinueWith,但是可以使用await吗?

解决方法

将任务存储在变量中:
var task = OperationThatMayCompleteSynchronously(parameter); //may throw

然后等待它:

await task; //may throw

这样,您可以区分潜在异常的两个来源.

请注意,异步方法永远不会直接抛出.他们通过他们返回的任务传递异常.即使对于在第一次等待之前执行的“验证”抛出也是如此.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读