Quando dovrei usare async/await e quando dovrei usare parallel.foreach in C#? Sono paralleli e asincroni/attendono lo stesso scopo? Quali sono le differenze in loro?Async/await e parallel in C#
risposta
asincrona/attendono circa asincronia, mentre Parallel.ForEach
è di circa parallelismo. Sono concetti correlati, ma non uguali.
Parallel.ForEach
viene utilizzato quando si desidera eseguire la stessa operazione su tutti gli elementi di una raccolta, in parallelo, bloccando il thread corrente fino al completamento di tutte le operazioni.
async/await viene utilizzato quando l'operazione corrente non può effettuare ulteriori progressi finché non è stata completata una particolare operazione asincrona, ma non si desidera bloccare il thread corrente. Questo è particolarmente utile in due situazioni:
- codice di scrittura che prende fondamentalmente fuori varie operazioni asincrone, uno dopo l'altro, nel thread UI, accedendo brevemente l'interfaccia utente tra le operazioni. (È più generale di quello, ma questo è un semplice esempio.) Non vuoi bloccare il thread dell'interfaccia utente, ma gestire tutte quelle operazioni asincrone è un altro dolore.
- Gestione lotti di operazioni di lunga durata alla volta, ad es. in un server web. Ogni singola richiesta può richiedere molto tempo a causa della chiamata ad altri servizi Web, database, ecc., Ma non si desidera avere un thread per richiesta, poiché i thread sono una risorsa relativamente costosa.
È possibile combinare il parallelismo e asincronia dando il via ad un nuovo compito che chiamerà Parallel.ForEach
, e quindi in attesa di questo compito. (Proprio come un esempio.)
- 1. Async await e parallel
- 2. Parallel for-loop in Windows
- 3. Posso nidificare parallel ::: parLapply()?
- 4. "find" e "ls" con GNU parallel
- 5. Quartz.net + Task Parallel Library
- 6. Run du on parallel
- 7. Parallel ForEach on DataTable
- 8. C++ Parallel std :: vector Sorting With Expensive Copying
- 9. Da dove cominciare con Distributed Computing/Parallel Processing? (Python/C)
- 10. Parallel For-Loop
- 11. C++ OpenMP Parallel For Loop - Alternative a std :: vector
- 12. Come usare Parallel Strategies in Haskell
- 13. Estensioni Grand Central vs Parallel
- 14. Maven 3 parallel build profile
- 15. Qual è esattamente la differenza tra @parallel e pmap?
- 16. Parallel R su un cluster di Windows
- 17. Successive .NET Parallel For - Blocco dopo ogni
- 18. MATLAB Parallel Computing Toolbox - Parallizzazione vs GPU?
- 19. lavoro che ruba con Parallel Computing Toolbox
- 20. TransactionScope non funziona con Parallel Extensions?
- 21. Adaptive Parallel Payment con l'esempio dell'API REST?
- 22. Parallel non funziona con Entity Framework
- 23. Come passare gli argomenti citati a GNU Parallel
- 24. Supporto della reportistica progressiva e dei risultati incrementali in .NET 4.0 "Task Parallel Library"
- 25. Qual è la differenza tra PArray e [::] in Data Parallel Haskell?
- 26. Come nutrire una vasta gamma di comandi su GNU Parallel?
- 27. Ereditarietà delle variabili di ambiente con GNU Parallel
- 28. Uso di IPython Parallel su Sun Grid Engine
- 29. TFS2010 - Parallel Build - Soluzione singola, agente single build
- 30. RSpec: Come testare metodi che usano Parallel (errore PG :: ConnectionBad)
Vedere questa domanda correlata: http://stackoverflow.com/questions/9898441/do-the-new-c-sharp-5-0-async-and-await-keywords-use -multiple-core –
Vedere come chiamare le operazioni asincrone in parallelo https://stackoverflow.com/questions/11564506/nesting-await-in-parallel-foreach/11565531#11565531 –