Будет ли это работать асинхронно? - PullRequest
0 голосов
/ 27 марта 2019

Я делаю два вызова, которые могут (в идеале) быть запущены одновременно. Первый вызов в конечном итоге попадает в базу данных, а второй - в веб-API. Подвох в том, что ни один из путей выполнения не является асинхронным. Я пытался поближе познакомиться с TPL, но пока не совсем там. Если бы я обернул два вызова метода в Задачи и ожидал их, действительно ли это будет выполнено одновременно в обоих случаях?

1 Ответ

2 голосов
/ 27 марта 2019

Вы путаете async ( Асинхронный шаблон ожидания ) и Асинхронный , да, вы можете одновременно запустить Асинхронно с задачами и / или шаблон асинхронного ожидания при условии, что они не зависят друг от друга

public async Task DoMagicStuff()
{       
    var task1 = DoDbAsync(); // Start Task
    var task2 = DoWebAsync();// Start Task

    // wait for both
    await Task.WhenAll(task1,task2);
}

или смеси IO и привязка к процессору работа

public async Task DoMagicStuff()
{

    var task1 = DoDbAsync(); // Start Task
    var task2 = Task.Run(() => DoWebAsync());// Start Task

    // wait for both
    await Task.WhenAll(task1,task2);
}

или без async, вы можете использовать Task.WaitAll

...