В каком потоке (ах) WebClient инициирует свои события?

Я не могу найти никакой документации, в которой указывается, в каком потоке WebClient вызывает свои события. Я провел несколько тестов и определил следующее:

  • Если вызывается из потока пользовательского интерфейса (скажем, из обработчика событий), обработчик событий будет выполняться в этом потоке. В качестве теста я добавил бесконечный цикл после вызова OpenReadAsync. Обработчик событий никогда не вызывался.

  • Если нет потока пользовательского интерфейса, как в консольном приложении, обработчик событий будет выполняться в потоке пула потоков. В этом случае, если бы я хотел предоставить некоторые результаты остальной части приложения, я должен был бы знать о проблемах с потоками.

Это поведение где-нибудь задокументировано? Я ничего не нашел.

У меня в основном тот же вопрос относительно новых асинхронных функций C # - в конечном итоге асинхронный код должен быть выполнен. Будет ли это порождать поток пула потоков, когда нет потока пользовательского интерфейса? Потребуется ли для этого, в свою очередь, потокобезопасный код?

Я чувствую, что здесь чего-то не хватает - я могу найти очень мало информации об этом, но это кажется мне важным.

10
задан TheFogger 20 August 2011 в 22:15
поделиться