У меня есть политика, которую я выполняю так:
_logger.LogDebug($"Got the policy for {tenant.TenantCode}");
policy.Execute(
() =>
{
_logger.LogDebug($"Calling _domainEventDLA.GetOldestEvent {tenant.TenantCode}");
domainEvent = _domainEventDLA.GetOldestEvent(tenant);
_logger.LogDebug($"Calling _domainEventDLA.GetOldestEvent {tenant.TenantCode}");
}
);
У меня установлено тайм-аут на 3 секунды, и я получаю исключение тайм-аута для Polly. Метод в execute занимает менее 100 миллисекунд.
В журнале я вижу первую строку журнала (Получил политику для ...), а следующая записанная запись - это исключение тайм-аута через 3 секунды. Я никогда не вижу строку журнала в execute до фактического вызова метода (Вызов _domainEventDLA ...).
Это политика тайм-аута:
var timeoutPolicy = Policy
.Timeout(3, timeoutStrategy: TimeoutStrategy.Pessimistic,
onTimeout: (context, timespan, task) =>
{
_logger.LogError(
$"A database timeout occured after {timespan.TotalSeconds} seconds, for tenant {tenant.TenantCode}.");
});
Это многопоточное приложение, поэтому другие потоки могут использовать ту же политику.
Есть идеи?