C# 异步启动多个任务并等待它们完成
在这种情况下,我希望异步启动用户定义数量的任务,并等待所有任务完成。简而言之,我要处理的是:C# 异步启动多个任务并等待它们完成,c#,.net,asynchronous,task-parallel-library,async-await,C#,.net,Asynchronous,Task Parallel Library,Async Await,在这种情况下,我希望异步启动用户定义数量的任务,并等待所有任务完成。简而言之,我要处理的是: [TestMethod] public async Task Start() { var numDrivers = 2; while (numDrivers != 0) { var rnd = new Random(); var r = rnd.Next(itemArray.Count); var t
[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--;
}
}
对于某些上下文,这些是SeleniumWebDrivers,正在加速运行一些UI测试。我看到浏览器弹出,但一旦最后一个Task.Run()
完成,所有执行都停止。在停止执行之前,如何启动n
驱动程序以异步运行,同时等待它们全部完成
我尝试了wait Task.Run(()=>HandleIntro(proxyDriver,target))代码>但这将等待任务,并且它们不会同时运行
HandleIntro:
private async Task HandleIntro(FirefoxDriver driver, string target) {
// do stuff
}
使用异步等待
相当简单。您的任务本身返回一个可等待的,可以异步等待所有任务完成:
[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);
}
[TestMethod]
公共异步任务启动()
{
var numDrivers=2;
列表任务=新列表();
while(numDrivers!=0)
{
var rnd=新随机数();
var r=rnd.Next(itemArray.Count);
var target=itemArray[r];
var proxyDriver=GetProxiedDriver();
tasks.Add(Task.Run(()=>HandleIntro(proxyDriver,target));
numDrivers--;
}
等待任务。何时(任务);
}
您可以在任务
数组上使用Task.WhenAll
,并等待它。查看Task.WaitAll()
/WhenAll()
。隐马尔可夫模型。。。执行也会立即停止,当第一个测试启动时,测试就会通过,并且在HandleIntro
中抛出异常?打开CLR异常并查看。我是一个哑巴,输入了错误的内容。非常感谢:)