【问题标题】:Cancellation token in Lambda Function Handler C#Lambda 函数处理程序 C# 中的取消令牌
【发布时间】:2018-11-01 13:08:38
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 2016-09-09
    • 2019-07-13
    • 2019-01-01
    • 1970-01-01
    相关资源
    最近更新 更多