+1 Хорошие ссылки. Однако я не согласен с тем, что многопоточное поведение является деталью реализации. Это важная информация для автора обработчика событий.

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

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

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

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

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

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

Ответы на вопрос(1)

Ваш ответ на вопрос