2016-05-02 4 views
1

のユニットが、私は少しの助けが必要なのF#との組み合わせでHangfireを使用するには:単位を変換する - >アクション

HangfireのBackgroundJob.Enqueueは、ジェネリック型Action<'T>とパラメータSystem.Linq.Expressions.Expressionとして取ります。フルでそう

Expression<Action<'T>>

そして、私の側に私は私の処分にメソッドを持っている:

let doSomething() =() したがってその署名がunit -> unitです。

どのように私は完全にAction(doSomething)を渡すことができました、着呼者がActionを取った場合、しかしそれはありません。

unit -> unitExpression<Action<'T>>に変換するにはどうすればよいですか?

+2

は 'someFunc'タイプの'単位の変換 - > unit'アクション 'には' 'アクション(のと同じくらい簡単ですsomeFunc) 'を実行します。しかし、関数をLINQ式に変換するのは少し難しいです。助けになるかもしれない例については、[別の質問に対するこの回答](http://stackoverflow.com/a/23146624/24380)を参照してください。 –

+2

メソッドの引数として構文F#関数から '式<_>'にタイプディレクティブ変換されているので、 'Enqueue(fun() - > doSomething())'を呼び出してみてください。 – kvb

答えて

3

kvbがコメント内で述べたように、F#はlambdaをExpressionに変換することをサポートしています。だから、あなたがその入力を無視し、doSomethingを呼び出す式を作成したい場合は、それだけだ。

BackgroundJob.Enqueue(fun x -> doSomething()) 
+0

私は入力パラメータに関する何かを逃したようです。ありがとう! – Snake

関連する問題