我找不到任何文件明确规定WebClient在哪个线程触发事件。 我进行了一些测试,得出了以下结论:
如果从UI线程调用(例如从事件处理程序中调用),则事件处理程序将在该线程上执行。 作为测试,在调用OpenReadAsync之后添加了一个无限循环。 事件处理程序从未被调用。
如果没有UI线程,例如在控制台应用程序中,则事件处理程序将在线程池线程上执行。 在这种情况下,如果我想要向应用程序的其余部分提供一些结果,我必须注意线程问题。
这种行为是否有记录? 我什么也没找到。
对于C#的新异步特性,我基本上有同样的问题-最终,异步代码将必须执行。 当没有UI线程时,它会生成线程池线程吗? 这反过来是否需要线程安全的代码?
我觉得我在这里缺少了什么-我只能找到非常少的信息,但这对我来说似乎很重要。