2010-11-29 34 views
0

Existe-t-il un moyen de simplifier ce qui suit, donc je n'aurai pas besoin d'une fonction runWithTimeout?Ordre des arguments et opérateur de droite de tuyau

let runWithTimeout timeout computation = 
    Async.RunSynchronously(computation, timeout) 

let processOneItem item = fetchAction item 
          |> runWithTimeout 2000 

Edit: Voici pourquoi je avais besoin la méthode supplémentaire:

let processOneItem item = fetchAction item 
          |> Async.Catch 
          |> runWithTimeout 2000 
          |> handleExceptions 
+1

Je crains que ce n'est pas clair ce que vous demandez. Vous demandez-vous la façon la plus propre d'écrire 'let processOneItem item = Async.RunSynchronously (item fetchAction, 2000)'? –

Répondre

3

Peut-être vous dire quelque chose comme ceci:

let processOneItem item = 
    fetchAction item 
    |> fun x -> Async.RunSynchronously(x, 2000) 
0

Voici un échantillon plus complet, pour référence future:

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

Je ne suis pas très désireux d'utiliser fun x -> ... dans le cadre d'un pipeline. Je pense que le style pipelining de l'écriture de code est agréable quand il est supporté par l'API (par exemple les listes), mais quand l'API ne correspond pas au style, il est juste préférable de suivre les habituels "C#" "style. De coures, c'est juste une préférence personnelle, mais je voudrais juste écrire:

let processOneItem item = 
    let work = Async.Catch(fetchAction item) 
    let result = Async.RunSynchronously(work, 30000) 
    handleExceptions result