Недавно я взаимодействовал с библиотекой обработки временных ошибок Polly на C#. Но только в контексте вызова API (микросервисов в нашей экосистеме).

Совсем недавно я понял, что его можно использовать в интеграции RavenDB с одним из моих проектов F# — об этом в блоге.

Вот моя реализация:

создатьПолитику: int -> AsyncRetryPolicy

executeCustom: CancellationToken -> (CancellationToken -> Task<'exception>) -> AsyncRetryPolicy -> Task<'exception>

Идея, стоящая за этим, состоит в том, чтобы создать такой интерфейс:

Содержимое fun ct -> task {} примерно представляет собой псевдокод. Но выглядит довольно красиво.

Во-первых, createPolicy создаст AsyncRetryPolicy , теперь это можно выполнить.

Сделав последний параметр executeCustom AsyncRetryPolicy, можно упростить цепочку функций.

Будем надеяться, что CancellationToken будет пройден, так что когда вы пройдете через токен httpContext.RequestAborted и он будет отменен, остальная часть цепочки разорвется.

Заключительные мысли

Мне не терпится начать изучать другие части библиотеки и придумывать для нее интерфейсы.

Я не смотрел ни на какие другие библиотеки F#, которые, возможно, уже сделали это — что в этом интересного?