Устойчивые функции Azure — тайм-аут HttpClient WaitForInstanceCompletionAsyncC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Устойчивые функции Azure — тайм-аут HttpClient WaitForInstanceCompletionAsync

Сообщение Anonymous »

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

Операция WaitForInstanceCompletionAsync была отменена.

с внутренним исключением:

Запрос был отменен из-за истечения настроенного HttpClient.Timeout, равного 100 секундам.

и источник:

Microsoft.DurableTask.Client.Grpc

При этом я установил тайм-аут, превышающий 100 секунд.
Вот код, который запускает оркестровку:

Код: Выделить всё

public class Trigger(IMessageMapper mapper)
{

[Function(nameof(Trigger))]
public async Task Run(
[ServiceBusTrigger("pipelinepriorityqueue", Connection = "ServiceBusConnection", IsSessionsEnabled = false)]
ServiceBusReceivedMessage message,
ServiceBusMessageActions messageActions,
[DurableClient] DurableTaskClient taskClient,
FunctionContext context)
{
string? instanceId = null;
try
{
var mappedMessage = mapper.ToApplicationMessage(message);

instanceId = await taskClient.ScheduleNewOrchestrationInstanceAsync($"{nameof(OrganizationOrchestrator)}", Tuple.Create(mappedMessage.OrganizationId, mappedMessage.SecretId, mappedMessage.Farms));

var waitForInstanceStart = new CancellationTokenSource(TimeSpan.FromMinutes(5));
var result = await taskClient.WaitForInstanceStartAsync(instanceId, waitForInstanceStart.Token);

var waitForInstanceCompletion = new CancellationTokenSource(TimeSpan.FromMinutes(10));
result = await taskClient.WaitForInstanceCompletionAsync(instanceId, true, waitForInstanceCompletion.Token);

await messageActions.CompleteMessageAsync(message);
}
catch (Exception ex)
{
await messageActions.DeadLetterMessageAsync(message, deadLetterErrorDescription: ex.Message);
throw;
}
finally
{
await taskClient.PurgeInstanceAsync(instanceId!, new PurgeInstanceOptions { Recursive = true });
}
}
}

Я попробовал установить функцию Timeout в файле host.json, но, похоже, это не помогло.
Я ожидал, что таймаут наступит после токен отмены. Не позже 100 секунд.
Это происходит локально, еще не тестировалось, но хотелось бы узнать причину этого.
Изменить 1:Возможно, также полезно знать, что в этом случае действия, начатые оркестровкой, будут продолжать выполняться до тех пор, пока не будут завершены.

Подробнее здесь: https://stackoverflow.com/questions/787 ... etionasync
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»