Running Multiple Tasks in Parallel

前端 未结 2 1142
無奈伤痛
無奈伤痛 2021-01-24 23:43

I have a list of proxies, each proxy goes to various sites and pulls the needed data from the sites. Currently it\'s doing this one at a time. But I\'d like to have 10 - 20 task

相关标签:
2条回答
  • 2021-01-25 00:16

    PArallel.ForEach does not work well as it expects a synchronous lambda and giving it an asynchronous one basically causes it to return as soon as it starts. There is a way around it though, check this question out: Is it OK to do some async/await inside some .NET Parallel.ForEach() code?

    0 讨论(0)
  • 2021-01-25 00:24

    One way is to avoid awaiting in the foreach. The thing is that your await effectively blocks your execution. A better way might be something like this:

    await Task.WhenAll(proxies.Select(p => DownloadDataFromSite(site)));
    

    This will mean you'll be awaiting all the tasks at once, which means the asynchronous I/O is going to happen in parallel. Note that if you're doing CPU work too, that's not going to really be parallelized.

    The point is, asynchronous I/O (such as downloading a web page) doesn't require more threads to run in parallel. On the other hand, Parallel.ForEach is actually intended for CPU-bound work, rather than I/O bound work, and it does execute the code on multiple threads.

    0 讨论(0)
提交回复
热议问题