转换单位 -> 单位到行动

Convert an unit -> unit to Action

要将 Hangfire 与 F# 结合使用,我需要一些帮助:

Hangfire 的 BackgroundJob.Enqueue 将泛型 Action<'T>System.Linq.Expressions.Expression 作为参数。

所以完整:Expression<Action<'T>>

在我这边,我有一个方法可以使用:

let doSomething () = () 因此它的签名是unit -> unit

如果被调用者选择 Action,我如何能够完美地传递 Action(doSomething),但事实并非如此。

那么如何将我的 unit -> unit 转换为 Expression<Action<'T>>

正如 kvb 在评论中所说,F# 支持将 lambda 转换为 Expressions,就像 C# 一样。所以,如果你想创建一个忽略其输入并调用 doSomething 的表达式,它只是:

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