Порядок аргументов и труба правообладателя

Есть ли способ упростить следующее, поэтому мне не понадобится функция 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
Другие вопросы по тегам