0

我有一个长时间运行的 lambda(有时 10 多分钟),我以这种方式调用它

 using (var lambdaClient = new AmazonLambdaClient(AWSOptions.Credentials(),new AmazonLambdaConfig
            {
                 Timeout = TimeSpan.FromSeconds(1000)
            }))
            {                  

                InvokeRequest invoke = new InvokeRequest()
                {
                    FunctionName = functionName,
                    InvocationType = InvocationType.RequestResponse,
                    Payload = JsonConvert.SerializeObject(payload)
                };


                var invokeResponse = await lambdaClient.InvokeAsync(invoke);
                if (invokeResponse == null)
                    return null;

                using (var sr = new StreamReader(invokeResponse.Payload))
                {
                    return new TriggerLambdaResponse()
                    {
                        StatusCode = invokeResponse.HttpStatusCode,
                        Payload = await sr.ReadToEndAsync()
                    };
                }
            }

我在不到 1000 秒(或 15 分钟)后从 InvokeAsync 行收到异常

异常:{ ClassName:System.Threading.Tasks.TaskCanceledException 消息:操作被取消。Data:null InnerException:{ ClassName:System.IO.IOException 消息:无法从传输连接读取数据:操作已取消。数据:空 InnerException:{ 类名:System.Net.Sockets.SocketException 消息:操作已取消

据我了解,当调用代码超时时,lambda 仍然继续其功能。我在 linux 的 docker aspnetcore 2.2 上运行。我应该设置任何其他默认超时吗?我可以看到 AWS sdk 正在使用 httpconnection 类,但我无权访问它的参数。有任何想法吗?

4

0 回答 0