Looking for c# Keywords? Try Ask4Keywords

C# Language Параллельные вызовы


пример

Одновременно можно ожидать нескольких вызовов, сначала вызвав ожидаемые задачи, а затем ожидая их.

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

    await firstTask;
    await secondTask;
}

Кроме того, Task.WhenAll можно использовать для группировки нескольких задач в одну Task , которая завершается, когда все переданные задачи завершены.

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

    await Task.WhenAll(firstTask, secondTask);
}

Вы также можете сделать это внутри цикла, например:

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

await Task.WhenAll(tasks);

Чтобы получить результаты из задачи после ожидания нескольких задач с помощью Task.WhenAll, просто подождите снова. Поскольку задача уже завершена, она вернет результат обратно

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

await Task.WhenAll(task1, task2);

var result = await task2;

Кроме того, Task.WhenAny может использоваться для одновременного выполнения нескольких задач, таких как Task.WhenAll выше, с той разницей, что этот метод будет завершен, когда будет завершена любая из поставленных задач.

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);
}

Task возвращаемая RunConcurrentTasksWhenAny , завершится, когда завершатся все из firstTask , secondTask или thirdTask .