Токен аннулирования в лямбда-функции обработчик C # - PullRequest
0 голосов
/ 22 мая 2018

Предоставляет ли обработчик лямбда-функций AWS в C # токен отмены?

Я прочитал документацию на сайте AWS (https://docs.aws.amazon.com/lambda/latest/dg/dotnet-programming-model-handler-types.html), но нигде не вижу, чтобы упоминались токены отмены. IЯ также проверял ILambdaContext, который передается в метод выполнения, но там ничего нет.

Ранее я работал с функциями Azure, и они просто передают его в качестве еще одного аргумента в функции, какописанные в этой статье: https://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-class-library#cancellation-tokens

1 Ответ

0 голосов
/ 01 июля 2019

Ответ: нет, как вы обнаружили.В настоящее время CancellationToken не предоставляется.

Вы можете сделать свой собственный, используя ILambdaContext.RemainingTime и CancellationTokenSource:

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

Я не уверен, какэто будет хорошо, так как по истечении оставшегося времени лямбда замерзнет, ​​поэтому ваш код не сможет изящно остановиться.Возможно, вы сможете оценить, сколько времени вашему коду нужно изящно остановить, а затем отменить токен задолго до оставшегося времени, например:

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