Lambda函数处理程序C#中的取消令牌

时间:2018-05-22 17:13:44

标签: c# amazon-web-services aws-lambda cancellation-token

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

1 个答案:

答案 0 :(得分:0)

正如您所发现的,答案是否定的。当前未提供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));