Я не могу найти документацию, которая указывает, какой поток WebClient вызывает события. Я провел несколько тестов и определил следующее:
-
Если вызван из потока пользовательского интерфейса (скажем, от обработчика события), обработчик события будет выполнен в этом потоке. В качестве теста я добавил бесконечный цикл после вызова OpenReadAsync. Обработчик событий никогда не вызывался.
-
Если нет потока пользовательского интерфейса, как в консольном приложении, обработчик события будет выполняться в потоке пула потоков. В этом случае, если бы я хотел предоставить некоторые результаты для остальной части приложения, я должен был бы знать о проблемах с потоками.
Является ли это поведение документированным где угодно? Я ничего не нашел.
У меня есть в основном тот же вопрос, касающийся новых асинхронных функций С# - в итоге, асинхронный код должен быть выполнен. Будет ли это также появляться поток потока потока, когда нет потока пользовательского интерфейса? Будет ли это, в свою очередь, требовать потокобезопасный код?
Я чувствую, что здесь что-то не хватает - я могу найти очень мало информации об этом, но это кажется важным для меня.