[英]Sync calling async nested methods - Will async work down the path?
我的库中有一个异步方法,并且顶级调用是在AWS Lambda函数的处理程序中同步进行的(出于某些原因,此处不再讨论)。 我想知道是否有任何电话是异步的? 还是因为第一个调用者是同步进行的,否则一切都会同步吗?
public void LambdaHandler(Input inp, ILambdaContext context)
{
method1().GetAwaiter().GetResult();
}
private async Task method1()
{
await method2();
await method3();
}
private async Task method2()
{
//do something
}
private async Task method3()
{
//do something
}
method2
和method3
会做他们一直做的事情 。 如果它们在Task
API之后纯粹是同步的,则它们将继续同步; 如果它们是异步的,那么它们将继续是异步的。 唯一的问题是: LambdaHandler
做什么,答案很简单:
如果它们已经同步完成,那就好了; 如果不是 ,则您将线程捆绑在sync-over-async块中。 如果您的代码使用仅具有单个工作程序的同步上下文或任务计划程序(这并不罕见),则这本身可能导致死锁,因为异步代码将需要执行任何后处理的线程将是停留在GetResult()
。 因此,异步部分无法完成,并且GetResult()
无法完成。
您应该避免像瘟疫一样在异步上同步。 有理由将其视为反模式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.