Сообщение Использование RetryPolicy от 10.11.2017 17:56
Изменено 10.11.2017 17:57 AK107
Async bug in RetryPolicy/RetryPolicyBase.cs
Выделенное место:
Должно быть (иначе operation будет выполняться фоном и вызывающий код не увидит ошибок):
з.ы. ну и до кучи выскажу мнение, что не очень удобно (мягко говоря) работать с кидаемым RetryLimitExceededException и считаю его лишним. Работа с повторами должна быть прозрачной для вызывающего кода, тем более, что ее можно опционально включать/выключать в результате половину кода обработки исключений придется переписывать; и вообще не хотелось бы завязываться на такие "левые" с точки зрения БЛ исключения.
public Task ExecuteAsync(Func<CancellationToken, Task> operation, CancellationToken cancellationToken = new CancellationToken())
{
if (Suspended)
return operation(cancellationToken);
OnFirstExecution();
return ExecuteImplementationAsync(ct => { operation(ct); return Task.FromResult(0); }, cancellationToken);
}
Должно быть (иначе operation будет выполняться фоном и вызывающий код не увидит ошибок):
public Task ExecuteAsync(Func<CancellationToken, Task> operation, CancellationToken cancellationToken = new CancellationToken())
{
if (Suspended)
return operation(cancellationToken);
OnFirstExecution();
return ExecuteImplementationAsync(async ct => { await operation(ct); return Task.FromResult(0); }, cancellationToken);
}
з.ы. ну и до кучи выскажу мнение, что не очень удобно (мягко говоря) работать с кидаемым RetryLimitExceededException и считаю его лишним. Работа с повторами должна быть прозрачной для вызывающего кода, тем более, что ее можно опционально включать/выключать в результате половину кода обработки исключений придется переписывать; и вообще не хотелось бы завязываться на такие "левые" с точки зрения БЛ исключения.
Async bug in RetryPolicy/RetryPolicyBase.cs
Выделенное место:
Должно быть (иначе operation будет выполняться фоном и вызывающий код не увидит ошибок):
з.ы. ну и до кучи выскажу мнение, что не очень удобно (мягко говоря) работать с кидаемым RetryLimitExceededException и считаю его лишним. Работа с повторами должна быть прозрачной для вызывающего кода, тем более, что ее можно опционально включать/выключать в результате половину кода обработки исключений придется переписывать; и вообще не хотелось бы завязываться на такие "левые" с точки зрения БЛ исключения.
public Task ExecuteAsync(Func<CancellationToken, Task> operation, CancellationToken cancellationToken = new CancellationToken())
{
if (Suspended)
return operation(cancellationToken);
OnFirstExecution();
return ExecuteImplementationAsync(ct => { operation(ct); return Task.FromResult(0); }, cancellationToken);
}
Должно быть (иначе operation будет выполняться фоном и вызывающий код не увидит ошибок):
public Task ExecuteAsync(Func<CancellationToken, Task> operation, CancellationToken cancellationToken = new CancellationToken())
{
if (Suspended)
return operation(cancellationToken);
OnFirstExecution();
return ExecuteImplementationAsync(async ct => { await operation(ct); return 0; }, cancellationToken);
}
з.ы. ну и до кучи выскажу мнение, что не очень удобно (мягко говоря) работать с кидаемым RetryLimitExceededException и считаю его лишним. Работа с повторами должна быть прозрачной для вызывающего кода, тем более, что ее можно опционально включать/выключать в результате половину кода обработки исключений придется переписывать; и вообще не хотелось бы завязываться на такие "левые" с точки зрения БЛ исключения.