Ho una situazione in cui voglio attivare un numero definito dall'utente di attività in modo asincrono e attendere che tutti vengano completati. Semplificato, ecco cosa ho a che fare con:Spegnimento di più attività in modo asincrono e in attesa che vengano completati
[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--;
}
}
Per alcuni contesto - questi sono webdrivers Selenio sempre filato per eseguire alcuni test dell'interfaccia utente. Vedo i browser visualizzati, ma non appena l'ultimo Task.Run()
viene completato, tutte le interruzioni di esecuzione. Come si attivano i driver n
in modo asincrono mentre si attende che vengano completati tutti prima di arrestare l'esecuzione?
Ho provato await Task.Run(() => HandleIntro(proxyDriver, target));
ma questo attende l'attività e non vengono eseguiti contemporaneamente.
HandleIntro:
private async Task HandleIntro(FirefoxDriver driver, string target) {
// do stuff
}
È possibile utilizzare 'Task.WhenAll' su una serie di' Task's, e 'await' che. – Luaan
Cerca in 'Task.WaitAll()'/'WhenAll()'. https://msdn.microsoft.com/en-us/library/dd270695%28v=vs.110%29.aspx –