一次又一次,我看到它说使用async- await不会创建任何额外的线程.这没有任何意义,因为计算机一次看起来只做一件事以上的唯一方法就是
因此,如果async- await这些都没有,那么它如何使应用程序响应?如果只有一个线程,则调用任何方法意味着在执行任何其他操作之前等待方法完成,并且该方法中的方法必须在继续之前等待结果,依此类推.
AWS 文件指出
在 C# 函数中使用 Async 和 AWS Lambda
如果您知道您的 Lambda 函数需要一个长时间运行的过程,例如将大文件上传到 Amazon S3 或从 DynamoDB 读取大量记录流,您可以利用 async/await 模式。通过使用此签名创建处理程序,Lambda 将同步执行该函数并在返回或超时之前等待最多 5 分钟执行完成。
我觉得很困惑 Lambda 会不会
同步执行函数,最多等待 5 分钟
当 Lambda 支持长达 15 分钟的处理时间时。这是否意味着如果我在处理程序上设置异步,我只能在 5 分钟内处理一个事件?
假设 APIGateway 触发一个等待 10 秒的函数(处理程序)
public async Task<APIGatewayProxyResponse> Get(APIGatewayProxyRequest request, ILambdaContext context){
var x = await Wait10Async();
return SomeAPIGatewayProxyResponse;
}
Run Code Online (Sandbox Code Playgroud)
Q1:当await将控制流返回给函数处理程序本身时,这个容器(执行环境)会发生什么?显然,Lambda 在返回 APIGateway 之前等待 Task 完成,但是在这 10 秒内,容器(或其他)是否接受并执行了更多Get功能?
问题背后的原因是 AWS Lambda 有 1000 个并发执行限制,它说每个执行都在单独的容器中运行,因此这让我质疑这种情况:
1 - APIGateway 接收 1000 个同时请求并启动 1000 个 Lambda 处理程序,这些处理程序在 10 秒后完成
在第一个请求之后(在它们完成之前)2 - 3 秒,另一个比方说 100 个请求来到 APIGateway。在这种情况下,所有 lambda 容器都已耗尽。
这是发生了什么还是await有解决这个问题的魔法?我知道如何不await阻塞经典视图应用程序中的循环。但是它在 Lambda 执行环境中的表现如何?