异步回调运行?我正在调用多个HttpWebRequest.BeginGetResponse,在BeginGetResponse的回调方法中,我正在调用EventHandler。在EventHandler中,有一些逻辑来测试下载是否成功。如果没有,它会尝试重新下载Html。我注意到产生了很多多线程,尤其是在发生错误时。那么,异步回调在哪个线程上运行?无论如何我可以在原始线程上调用EventHandler吗?如果那不可行,我可以在UI线程上调用它吗?谢谢!回调是在线程池线程上进行的。.NET中没有在特定线程上运行代码的机制。这很难做到,你不能在线程繁忙时中断它并让它运行一些代码。这导致了锁无法解决的可怕的重入问题。线程必须处于空闲状态,不能主动改变程序的状态。有一个行为线程,Winforms或WPF应用程序中的UI线程。这也是必须处理基本上线程不安全对象的线程,任何与UI相关的对象。这并非巧合。这两个类库都可以将工作线程的调用编组到UI线程,特别是帮助以线程安全的方式更新UI。在Winforms中使用Control.Begin/Invoke(),在WPF中使用Dispatcher.Begin/Invoke()。BackgroundWorker是一个便利类,无需显式管理编组即可完成此操作。但不适用于I/O完成回调。“关于原始主题”是什么意思?哪个原帖?您可以使用Control.BeginInvoke或Dispatcher.BeginInvokeControl.BeginInvoke发送到UI线程。您不能编组任意线程-它必须有类似消息泵的东西等待工作。至于哪个线程执行HttpWebRequest异步回调——我希望有一个通用的线程池工作线程,或者可能是一个IO完成端口线程。使用开始/结束异步模式,请注意可以在调用它们的线程上完成多种任务。当您调用BeginXXX时,它会返回一个布尔值,指示任务是否已在调用线程上完成。基本答案是它可以是任何线程。如果您使用的是WPF,则可以使用Dispatcher在UI线程上调用您的逻辑。否则,(如果不在WPF中)您可以使用SyncrhronizationContext来完成同样的事情。以上就是C#学习教程:AsyncCallbacks运行在哪个线程?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
