当用户询问时,我想对数据库进行多次查询,然后显示响应。
但是如果我使用
async
await- Function1
await- Function2
await- Function3
"склеить ответ функций и перевести в json"
вывести ответ....
那么实际上这些函数是一个接一个地执行的,唯一的区别是直到没有答案时进程才会挂起,这与同步编程不同,但是没有多线程。
如何进行多线程处理,这就是从所有函数收到答案的时间 - 调用等待?
尝试通过
Task.WhenAll
:对于异步函数的并行执行,您需要使用方法
Task.WhenAll()
:所有任务完成后,可以使用
await
or 属性访问结果(如果有)Result
:还值得一提的是异常处理。如果您不在每个方法中处理它们,那么
Task.WhenAll()
当然会将它们转发到顶部。特殊之处在于,如果Task.WhenAll()
期望使用关键字,则发生的第一个异常会在顶部await
抛出。在这种情况下,需要更加小心地处理任务:我们不知道哪些任务以错误结束,哪些任务还没有完成。因此,需要使用/属性进行初步检查。IsFaulted
Status
如果您执行阻塞等待 (
Task.WhenAll().Wait()
) 或使用阻塞对应 (Task.WaitAll()
),则发生的所有异常都放在内部AggregateException
。检查哪些任务已失败以及哪些任务尚未完成保持不变。