Опция 1: Изящное отключение достигается с помощью токенов отмены . Похоже, я не могу определить, что у вас есть льготный период после выдачи токена отмены: (
public static class AsyncExample
{
[FunctionName("BlobCopy")]
public static async Task RunAsync(
[BlobTrigger("sample-images/{blobName}")] Stream blobInput,
[Blob("sample-images-copies/{blobName}", FileAccess.Write)] Stream blobOutput,
CancellationToken token,
ILogger log)
{
log.LogInformation($"BlobCopy function processed.");
await blobInput.CopyToAsync(blobOutput, 4096, token);
}
}
Опция 2 заключается в использовании расширений функций длительного пользования . Эти расширения обеспечивают надежное выполнение за счет поддержания состояния и использования контрольных точек , чтобы позволить вашим функциям перезапустить промежуточное выполнение после завершения работы или сбоя. Вкратце, долговременные функции проверяют состояние вашей функции в каждом операторе ожидания и включают воспроизведение из последнего успешного оператора ожидания.
Вариант 3 - использовать слоты развертывания и иметь слот Prod1 и Prod2 и альтернативное развертывание. Это позволит вам создать подход «сток-стоп», чтобы сохранить запущенные экземпляры до завершения. Вам по-прежнему нужно будет обрабатывать сбойные и неизвестные исключения с помощью долговременных функций или токена отмены.
Опция 4 - использовать два экземпляра приложения функций и использовать балансировщик нагрузки для управления трафиком между ними.