提问者:小点点

异步触发多个任务并等待它们完成[重复]


我有一种情况,我希望异步地启动用户定义的任务数量,并等待它们全部完成。简化一下,这是我要处理的:

[TestMethod]
public async Task Start() {
        var numDrivers = 2;
        while (numDrivers != 0) {
            var rnd = new Random();
            var r = rnd.Next(itemArray.Count);
            var target = itemArray[r];
            var proxyDriver = GetProxiedDriver();
            Task.Run(() => HandleIntro(proxyDriver, target));
            numDrivers--;
        }
 }

对于某些上下文--这些是Selenium WebDriver正在加速运行一些UI测试。我看到浏览器弹出,但只要最后一个完成,所有执行就会停止。如何启动驱动程序以异步运行,同时等待它们全部完成,然后停止执行?

我尝试了;HandleIntro(proxyDriver,target))/code>,但这会等待任务,并且它们不会同时运行。

HandleIntro:

private async Task HandleIntro(FirefoxDriver driver, string target) {
    // do stuff
}

共1个答案

匿名用户

null

[TestMethod]
public async Task Start() 
{
   var numDrivers = 2;
   List<Task> tasks = new List<Task>();

   while (numDrivers != 0) 
   {
       var rnd = new Random();
       var r = rnd.Next(itemArray.Count);

       var target = itemArray[r];
       var proxyDriver = GetProxiedDriver();

       tasks.Add(Task.Run(() => HandleIntro(proxyDriver, target)));
       numDrivers--;
   }

   await Task.WhenAll(tasks);
}

相关问题