Lambda 函数处理程序 C# 中的取消标记

Cancellation token in Lambda Function Handler C#

C# 中的 AWS Lambda 函数处理程序是否提供取消令牌?

我已阅读 AWS 站点 (https://docs.aws.amazon.com/lambda/latest/dg/dotnet-programming-model-handler-types.html) 上的文档,但我看不到任何地方提到取消令牌。我还检查了传递给执行方法的 ILambdaContext,但那里什么也没有。

我之前使用过 Azure Functions,他们只是将它作为另一个参数传递给本文所述的函数:https://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-class-library#cancellation-tokens

正如您发现的那样,答案是否定的。目前没有提供CancellationToken

您可以使用 ILambdaContext.RemainingTimeCancellationTokenSource 创建自己的:

public async Task FunctionHandler(SQSEvent evnt, ILambdaContext context)
{
    var cts = new CancellationTokenSource(context.RemainingTime);
    var myResult = await MyService.DoSomethingAsync(cts.Token);
}

我不确定这会有多大用处,因为当剩余时间结束时,Lambda 将被冻结,因此您的代码不会有机会正常停止。也许您可以估计您的代码需要多长时间才能正常停止,然后在剩余时间之前取消令牌,例如:

var gracefulStopTimeLimit = TimeSpan.FromSeconds(2);
var cts = new CancellationTokenSource(context.RemainingTime.Subtract(gracefulStopTimeLimit));