Порядок аргументов и труба право оператора - PullRequest
0 голосов
/ 30 ноября 2010

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

3 голосов
/ 30 ноября 2010

Я не очень хочу использовать fun x -> ... как часть конвейера.

Я думаю, что конвейерный стиль написания кода хорош, когда он поддерживается API (например, списками), но когда API не соответствует стилю, просто лучше следовать обычному "C # -подобному" стиль. Конечно, это личное предпочтение, но я бы просто написал:

let processOneItem item =  
  let work = Async.Catch(fetchAction item)
  let result = Async.RunSynchronously(work, 30000)
  handleExceptions result
3 голосов
/ 30 ноября 2010

Возможно, вы имеете в виду что-то вроде этого:

let processOneItem item =
  fetchAction item
  |> fun x -> Async.RunSynchronously(x, 2000)
0 голосов
/ 30 ноября 2010

Вот более полный пример для дальнейшего использования:

let processOneItem item =  fetchAction item
                           |> Async.Catch
                           |> fun x -> Async.RunSynchronously(x,30000)
                           |> handleExceptions
...