Ответ: нет, как вы обнаружили.В настоящее время 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));