C# AWS Lambda在执行等待异步操作时的行为?

C# AWS Lambda在执行等待异步操作时的行为?,c#,amazon-web-services,.net-core,aws-lambda,aws-api-gateway,C#,Amazon Web Services,.net Core,Aws Lambda,Aws Api Gateway,假设APIGateway触发一个等待10秒的函数(处理程序) public async Task<APIGatewayProxyResponse> Get(APIGatewayProxyRequest request, ILambdaContext context){ var x = await Wait10Async(); return SomeAPIGatewayProxyResponse; } 公共异步任务获取(APIGatewayProxyRequest

假设APIGateway触发一个等待10秒的函数(处理程序)

public async Task<APIGatewayProxyResponse> Get(APIGatewayProxyRequest request, ILambdaContext context){
     var x = await Wait10Async();
     return SomeAPIGatewayProxyResponse;
}
公共异步任务获取(APIGatewayProxyRequest请求,ILambdaContext上下文){
var x=等待Wait10Async();
返回SomeAPIGatewayProxyResponse;
}
Q1:
wait
将控制流返回到函数处理程序本身时,该容器(执行环境)会发生什么情况?显然,Lambda会在返回到APIGateway之前等待任务完成,但在这10秒内,容器(或其他)会发生什么情况接受并执行更多的
Get
函数

这个问题背后的原因是AWS Lambda有1000个并发执行限制,它说每个执行都在单独的容器中运行,因此我对这个场景提出疑问:

1-APIGateway同时接收1000个请求并启动1000个Lambda处理程序,10秒后完成

2-3秒,在第一个请求之后(在它们完成之前),另一个请求(比如100个请求)到达APIGateway。在这种情况下,所有lambda容器均已耗尽


这就是所发生的事情,还是
wait
有一种魔力可以解决这个问题?我知道
await
如何在经典视图应用程序中阻止循环。但是它在Lambda执行环境中的行为如何?

AFAIC将API网关与Lambda一起使用意味着每个请求都有一个新的执行环境,在整个Lambda处理程序返回之前,Lambda仍在运行。@zaitsman您不认为这与Lambda的“热”启动情况相矛盾吗?如果你发射1λ,则需要初始设置时间。考虑这0)在最初的一次呼叫时,在1秒的火灾中,1的LAMBDA(2秒后返回2)),在第一个返回3之前,另一个lambda建议第二个处理器将创建另一个容器,因此需要冷启动设置时间。然而,根据理论,即使在一个新的容器中初始化,它也不会慢下来。您怎么说?容器在
等待
睡眠
或任何类似过程中不接受和执行其他调用。单个容器一次不会处理多个调用。@MarkB Ok,但这仍然会对我在第二条评论中提到的内容留下一个问号。如果每次火灾都会导致一个新的容器,那么为什么这些容器不会遭受冷启动呢?@CanSahin你必须定义“冷启动”。我对AWS lambda如何在内部工作知之甚少,但我可以想象运行时环境与代码环境是分开的,您的代码位于某种形式的s3存储或类似存储中-当调用lambda时,一个已经存在的环境正在连接到s3,运行您的代码,退出,断开与该存储的连接,然后返回池。e、 g.执行单元没有“冷启动”问题,延迟最小——只需获取并运行正确的代码。