Как параллельно выполнять функции на C#?

При запросе пользователя я хочу произвести несколько запросов к БД и потом вывести ответ.
Но, если я использую async
await- Function1  
await- Function2
await- Function3
"склеить ответ функций и перевести в json"
вывести ответ....

то фактически эти функции выполняются друг за другом с тем лишь отличием, что процесс не подвисает, пока ответа нет, в отличии от синхронного программирования, но никакой многопоточности нет.
Как сделать многопоточность и вот когда ответ будет получен со всех функций- вызвать await?
  • Вопрос задан
  • 467 просмотров
Пригласить эксперта
Ответы на вопрос 1
@nightwolf_du
5 лет опыта. c#, js, sql.
самый простой вариант - попробуйте вызвать без await, т.е.
var task1 = Func1();
var task2 = Func2();
Затем подождите асинхронно завершения всех тасков
await Task.WhenAll(task1, task2, task3);
И делайте с результатами что хотите. Результат можете брать хоть await task1, хоть task1.Result (аналогично с остальными task)

Function1 в таком варианте может исполняться синхронно до первого await (точнее могу сказать подняв книгу, которую и вам рекомендую - Дэвис Д. - Асинхронное программирование в C# 5.0 - 2013 )

А так есть куча способов параллельного исполнения - от брутального старта нового потока new Thread(<делегат>).Start() и записи куда-нибудь в общую память, старенького Parallel.ForEach до Task.Factory.StartNew()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы