【发布时间】:2011-08-20 22:15:07
【问题描述】:
我找不到任何说明 WebClient 在哪个线程上引发其事件的文档。我进行了一些测试并确定了以下内容:
如果从 UI 线程(例如从事件处理程序)调用,事件处理程序将在该线程上执行。作为测试,我在调用 OpenReadAsync 之后添加了一个无限循环。从未调用过事件处理程序。
如果没有 UI 线程,例如在控制台应用程序中,事件处理程序将在线程池线程上执行。在这种情况下,如果我想为应用程序的其余部分提供一些结果,我必须注意线程问题。
这种行为是否记录在任何地方?我什么也没找到。
关于 C# 的新异步特性,我有一个基本相同的问题 - 最终,必须执行异步代码。当没有 UI 线程时,这也会产生一个线程池线程吗?反过来,这是否需要线程安全代码?
我觉得我在这里遗漏了一些东西 - 我只能找到很少的信息,但这对我来说似乎很重要。
【问题讨论】:
-
好问题!我刚刚在使用 WebClient 时遇到了同样的问题,并在得出与您相同的结论后开始使用谷歌搜索。
标签: c# asynchronous webclient