Como posso esperar até que o Parallel.ForEach seja concluído


122

Estou usando o TPL no meu projeto atual e usando o Parallel.Foreach para girar muitos threads. A classe Task contém Wait () para aguardar até que a tarefa seja concluída. Assim, como posso esperar que o Parallel.ForEach seja concluído e depois executar as próximas instruções?

Respostas:


192

Você não precisa fazer nada de especial; Parallel.Foreach()esperará até que todas as suas tarefas ramificadas sejam concluídas. No thread de chamada, você pode tratá-lo como uma única instrução síncrona e, por exemplo, envolvê-lo em uma tentativa / captura.


10
"Parallel.Foreach () irá esperar até que todas as suas tarefas ramificadas estejam concluídas", pode ser confundido em alguma situação, como (tarefa assíncrona dentro): Parallel.ForEach (groupedUnreadMessages, async unreadMsgCollection => {/ * works * /});
Bo HU

Aqui está um outras questões em stackoverflow: stackoverflow.com/questions/11564506/...
Bo HU

4
Esta resposta é de 2011, antes de assíncrono / aguardar. Mas, como eu disse, gerar tópicos dentro do ForEach não é uma boa ideia. Nem é uma ação assíncrona. Os links que você postou fornecem boas informações e soluções.
Henk Holterman

1
"threads de desova no ForEach não são uma boa ideia", você pode expandir? Isso é "a menos que você espere antes de retornar"?
Gianthra

16

Você não precisa disso com o Parallel.Foreach: ele executa o foreach apenas em quantos threads houver processadores disponíveis, mas retorna de forma síncrona.

Mais informações podem ser encontradas aqui

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.