Я хочу иметь возможность написать вычислительное выражение на F #, которое сможет повторить операцию, если она выдает исключение.Прямо сейчас мой код выглядит следующим образом:
let x = retry (fun() -> GetResourceX())
let y = retry (fun() -> GetResourceY())
let z = retry (fun() -> DoThis(x, y))
etc. (this is obviously an astract representation of the actual code)
Мне нужно иметь возможность повторять каждую из функций определенное количество раз, которое я определил здесь.
Я думал, что здесь может помочь вычислительное выражение, но я не понимаю, как оно могло бы помочь мне убрать явное завершение каждой правой стороны к Retryable <'T>
Я мог быПосмотрите на выражение для вычисления, которое выглядит примерно так:
let! x = Retryable( fun() -> GetResourceX())
etc.
Я понимаю, что монады, грубо говоря, являются типами-обертками, но я надеялся обойти это.Я знаю, что могу перегрузить оператор и иметь очень лаконичный синтаксис для преобразования операции в Retryable <'T>, но для меня это просто делает повторение / перенос более лаконичным;это все еще там.Я мог бы обернуть каждую функцию в Retryable <'T>, но еще раз, я не вижу значения сверх того, что делается в верхней части поста (вызов повторения для каждой операции. По крайней мере, это очень явно).
Может быть, здесь вычисления - неправильная абстракция, я не уверен.Любые идеи о том, что можно сделать здесь?