Em quais threads o WebClient gera seus eventos?

Não consigo encontrar nenhuma documentação que especifique em qual thread o WebClient gera seus eventos. Fiz alguns testes e determinei o seguinte:

Se chamado de um thread da interface do usuário (digamos, de um manipulador de eventos), o manipulador de eventos será executado nesse thread. Como teste, adicionei um loop infinito após a chamada para o OpenReadAsync. O manipulador de eventos nunca foi chamado.

Se não houver um thread da interface do usuário, como em um aplicativo de console, o manipulador de eventos será executado em um thread do pool de threads. Nesse caso, se eu quisesse fornecer alguns resultados para o restante do aplicativo, teria que estar ciente dos problemas de encadeamento.

Esse comportamento está documentado em algum lugar? Não encontrei nada.

Eu tenho basicamente a mesma pergunta sobre os novos recursos assíncronos do C # - eventualmente, o código assíncrono precisará ser executado. Isso também gerará um encadeamento do conjunto de encadeamentos quando não houver encadeamento da interface do usuário? Por sua vez, isso exigirá código de segurança para threads?

Sinto que estou perdendo algo aqui - só consigo encontrar muito pouca informação sobre isso, mas isso parece importante para mi

questionAnswers(2)

yourAnswerToTheQuestion