C# Language Appels simultanés


Exemple

Il est possible d'attendre plusieurs appels en même temps qu'en invoquant d' abord les tâches awaitable et qui les attend.

public async Task RunConcurrentTasks()
{
    var firstTask = DoSomethingAsync();
    var secondTask = DoSomethingElseAsync();

    await firstTask;
    await secondTask;
}

Vous pouvez également utiliser Task.WhenAll pour regrouper plusieurs tâches en une seule Task , qui se termine lorsque toutes les tâches réussies sont terminées.

public async Task RunConcurrentTasks()
{
    var firstTask = DoSomethingAsync();
    var secondTask = DoSomethingElseAsync();

    await Task.WhenAll(firstTask, secondTask);
}

Vous pouvez également faire cela dans une boucle, par exemple:

List<Task> tasks = new List<Task>();
while (something) {
    // do stuff
    Task someAsyncTask = someAsyncMethod();
    tasks.Add(someAsyncTask);
}

await Task.WhenAll(tasks);

Pour obtenir les résultats d'une tâche après avoir attendu plusieurs tâches avec Task.WhenAll, attendez simplement la tâche à nouveau. Comme la tâche est déjà terminée, le résultat sera renvoyé

var task1 = SomeOpAsync();
var task2 = SomeOtherOpAsync();

await Task.WhenAll(task1, task2);

var result = await task2;

En outre, Task.WhenAny peut être utilisé pour exécuter plusieurs tâches en parallèle, telles que Task.WhenAll ci-dessus, à la différence que cette méthode se terminera lorsque l' une des tâches fournies sera terminée.

public async Task RunConcurrentTasksWhenAny()
{
    var firstTask = TaskOperation("#firstTask executed");
    var secondTask = TaskOperation("#secondTask executed");
    var thirdTask = TaskOperation("#thirdTask executed");
    await Task.WhenAny(firstTask, secondTask, thirdTask);
}

La Task renvoyée par RunConcurrentTasksWhenAny se terminera à la fin de firstTask , secondTask ou thirdTask .