Порядок аргументов и труба правообладателя
Есть ли способ упростить следующее, поэтому мне не понадобится функция runWithTimeout?
let runWithTimeout timeout computation =
Async.RunSynchronously(computation, timeout)
let processOneItem item = fetchAction item
|> runWithTimeout 2000
Изменить: вот почему мне нужен дополнительный метод:
let processOneItem item = fetchAction item
|> Async.Catch
|> runWithTimeout 2000
|> handleExceptions
3 ответа
Решение
Возможно, вы имеете в виду что-то вроде этого:
let processOneItem item =
fetchAction item
|> fun x -> Async.RunSynchronously(x, 2000)
Я не очень заинтересован в использовании fun x -> ...
как часть трубопровода.
Я думаю, что конвейерный стиль написания кода хорош, когда он поддерживается API (например, списками), но когда API не соответствует стилю, просто лучше следовать обычному "C#-подобному" стилю. Конечно, это личное предпочтение, но я бы просто написал:
let processOneItem item =
let work = Async.Catch(fetchAction item)
let result = Async.RunSynchronously(work, 30000)
handleExceptions result
Вот более полный пример для дальнейшего использования:
let processOneItem item = fetchAction item
|> Async.Catch
|> fun x -> Async.RunSynchronously(x,30000)
|> handleExceptions