我有一个场景,需要异步地启动用户定义数量的任务,并等待它们全部完成。简单来说,我的需求如下:
[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测试。我看到浏览器弹出,但是一旦最后一个
Task.Run()
完成,所有执行都会停止。如何在等待它们全部完成之前异步启动n
个驱动程序来停止执行?我已经尝试了
await Task.Run(() => HandleIntro(proxyDriver, target));
,但这等待任务,它们不会同时运行。
HandleIntro:
private async Task HandleIntro(FirefoxDriver driver, string target) {
// do stuff
}
Task
数组上使用Task.WhenAll
,然后使用await
。 - LuaanTask.WaitAll()
/WhenAll()
。https://msdn.microsoft.com/zh-cn/library/dd270695(v=vs.110).aspx - Jeroen Vannevel