一次启动多个任务,然后在一个任务完成时启动另一个任务

阿米拉

我有一个在asp.net网络api中运行的代码,该代码可从其他站点下载图像文件。

这是我用来下载图像的代码。

       foreach (string file in images)
        {
            using (WebClient client = new WebClient())
            {
               await client.DownloadFileTaskAsync(file, path + Path.GetFileName(file));                    
            }
        }

我真正需要做的是一次开始10次下载。(例如,使用Task.Run ...或其他方式),然后在最初启动的10个文件逐个完成时,逐个启动其余文件。

对于EX。

开始10个任务

等到10个任务之一完成

1完成后,开始另一个任务

当另一个1完成时,开始另一个任务,等等。

直到下载列表中的所有图像。

因此,当代码运行时,我最多可以有10个并发下载(如果没有更多图片可下载,则少于10个)。

我正在使用.net 4.5.2

你们能指出我正确的方向吗?

斯蒂芬·克莱里

您可以SemaphoreSlim用来限制异步工作:

private readonly SemaphoreSlim _mutex = new SemaphoreSlim(10);

...

var downloads = images.Select(file => DownloadAsync(file));
await Task.WhenAll(downloads);

...

private async Task DownloadAsync(string file)
{
  await _mutex.WaitAsync();
  try
  {
    using (WebClient client = new WebClient())
    {
      await client.DownloadFileTaskAsync(file, path + Path.GetFileName(file));                    
    }
  }
  finally
  {
    _mutex.Release();
  }
}

笔记:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何声明一个未启动的任务,将等待另一个任务?

来自分类Dev

Asyncio在另一个任务中启动一个任务?

来自分类Dev

从另一个任务启动singleTop活动

来自分类Dev

如何首先启动另一个终端任务?

来自分类Dev

如何在完成另一个任务之前完成一个任务

来自分类Dev

RxJava:我如何开始一个任务,当它完成时开始另一个任务?

来自分类Dev

从另一个任务到达另一个任务任务的容器

来自分类Dev

删除另一个任务的从属任务?

来自分类Dev

从另一个任务生成新任务

来自分类Dev

在属性更改启动长时间运行的任务中填充另一个属性

来自分类Dev

在启动屏幕中执行另一个活动(主要活动除外)的异步任务

来自分类Dev

另一个完成后运行一个耙任务

来自分类Dev

当另一个任务完成时,强制BufferedWriter从BlockingQueue写入

来自分类Dev

Gulp:在另一个任务中使用一个任务的输出

来自分类Dev

创建一个使用参数执行另一个任务的任务

来自分类Dev

Gulp-从另一个任务获取一个任务的返回值

来自分类Dev

将grunt参数从一个任务传递到另一个任务

来自分类Dev

使一个任务依赖于另一个任务

来自分类Dev

Gradle:将变量从一个任务传递到另一个任务

来自分类Dev

Gulp-从另一个任务获取一个任务的返回值

来自分类Dev

在第一个任务之后运行另一个任务

来自分类Dev

当另一个任务依赖时,将参数传递给gulp任务

来自分类Dev

Inno Setup当另一个任务被选中时,取消选中一个任务

来自分类Dev

一次只执行一个线程,如何同时执行多个任务?

来自分类Dev

Gulp任务不等待上一个任务的完成

来自分类Dev

在Powershell中为另一个本地用户登录时触发的一次性计划任务

来自分类Dev

当另一个使用多线程完成时,启动一个方法

来自分类Dev

吞噬另一个任务的源头

来自分类Dev

从另一个任务设置testInstrumentationRunnerArgument

Related 相关文章

  1. 1

    如何声明一个未启动的任务,将等待另一个任务?

  2. 2

    Asyncio在另一个任务中启动一个任务?

  3. 3

    从另一个任务启动singleTop活动

  4. 4

    如何首先启动另一个终端任务?

  5. 5

    如何在完成另一个任务之前完成一个任务

  6. 6

    RxJava:我如何开始一个任务,当它完成时开始另一个任务?

  7. 7

    从另一个任务到达另一个任务任务的容器

  8. 8

    删除另一个任务的从属任务?

  9. 9

    从另一个任务生成新任务

  10. 10

    在属性更改启动长时间运行的任务中填充另一个属性

  11. 11

    在启动屏幕中执行另一个活动(主要活动除外)的异步任务

  12. 12

    另一个完成后运行一个耙任务

  13. 13

    当另一个任务完成时,强制BufferedWriter从BlockingQueue写入

  14. 14

    Gulp:在另一个任务中使用一个任务的输出

  15. 15

    创建一个使用参数执行另一个任务的任务

  16. 16

    Gulp-从另一个任务获取一个任务的返回值

  17. 17

    将grunt参数从一个任务传递到另一个任务

  18. 18

    使一个任务依赖于另一个任务

  19. 19

    Gradle:将变量从一个任务传递到另一个任务

  20. 20

    Gulp-从另一个任务获取一个任务的返回值

  21. 21

    在第一个任务之后运行另一个任务

  22. 22

    当另一个任务依赖时,将参数传递给gulp任务

  23. 23

    Inno Setup当另一个任务被选中时,取消选中一个任务

  24. 24

    一次只执行一个线程,如何同时执行多个任务?

  25. 25

    Gulp任务不等待上一个任务的完成

  26. 26

    在Powershell中为另一个本地用户登录时触发的一次性计划任务

  27. 27

    当另一个使用多线程完成时,启动一个方法

  28. 28

    吞噬另一个任务的源头

  29. 29

    从另一个任务设置testInstrumentationRunnerArgument

热门标签

归档