gpt4 book ai didi

c# - 同步调用异步嵌套方法 - 异步会在路径上起作用吗?

转载 作者:太空宇宙 更新时间:2023-11-03 20:49:08 25 4
gpt4 key购买 nike

我的库中有异步方法,顶层调用是在 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
}

最佳答案

method2method3 将做他们一直做的事。如果它们在 Task API 后面是纯同步的,那么它们将继续保持同步;如果它们是异步的,那么它们将继续异步。这里唯一的问题是:LambdaHandler 会做什么,答案很简单:

  • 它将阻塞直到它们完成

如果它们已经同步完成,那很好;如果它们不是,那么您已经在异步同步块(synchronized block)中绑定(bind)了一个线程。如果您的代码使用只有一个 worker 的同步上下文或任务调度程序(这并不罕见),这可能本身导致死锁,因为异步代码需要的线程做任何后处理都会卡在 GetResult() 处等待。所以异步部分无法完成,GetResult()也无法完成。

你应该像瘟疫一样避免异步同步。它被认为是反模式是有原因的。

关于c# - 同步调用异步嵌套方法 - 异步会在路径上起作用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57176626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com