.net - 当工作线程抛出异常时,是否调用 AsyncCallback
问题描述
我是.net异步编程(异步编程模型)的新手,关于工作线程和异常的关系只有两个问题。下面是一个例子:
private void OnPerformSearch(object sender, RoutedEventArgs e)
{
WebRequest req = WebRequest.Create("http://www.google.com/#q=weather");
req.BeginGetResponse(new AsyncCallback(Callback), req); // here the main thread calls BeginGetResponse() to enqueues the work in threadpool then a worker thread A will get the job done
...// do other stuff
}
private void Callback(IAsyncResult iar)
{
WebRequest req = (WebRequest) iar.AsyncState;
try
{
WebResponse resp = req.EndGetResponse(iar);
ProcessResponse(resp);
}
catch(Exception x)
{
LogError(x);
}
}
Q1-我们知道该BeginGetResponse
方法将线程池中的工作排入队列并立即返回,调用者现在可以继续其他工作,然后线程池中的工作线程(假设是线程A)将完成工作。我的问题是,当线程 A 完成工作时,线程池是否会分配不同的工作线程(线程 B)来调用完成回调?还是线程 A 会继续调用回调?
Q2-我们知道异步操作完成时调用的完成回调。但是如果工作线程A在做作业的时候出错了,会不会认为作业“完成”了,可以调用回调呢?或者在我们重新启动应用程序之前,这个过程会永远卡住?
解决方案
推荐阅读
- ios - 升级到 Xcode 版本 10.2 (10E125) 后如何更正错误
- c# - 如果字符串值不为空或为空,则在字符串中添加“|”
- jetty - 带有 Jersey 和嵌入式 Jetty 的 CrossOriginFilter
- android - 如果项目存在于数据库中,Android Firestore 更新字段值
- wordpress - 如何在 wordpress 发布后向 mailchimp 自动化发送电子邮件
- typescript - 将值传递到量角器中黄瓜的不同步骤
- javascript - Angular:你能提取文本响应类型的状态吗?
- javascript - 离线时此测验如何获得答案?
- java - 访问者模式中 List.of() 的使用
- jira - Jira:工单显示为已解决,分辨率设置为无