Quartz.NET 和 F# - SystemTime 和 KeyMatcher

Quartz.NET and F# - SystemTime and KeyMatcher

我正在尝试在 F# 中使用 Quartz.NET,但 运行 遇到了一些问题,尽管 Quartz.NET 在 F# 中可用,但似乎没有关于它的文档很多,我很难理解它与 C# 中的内容之间的差异。

我目前 运行 遇到的一个问题是设置 SystemTime,如本问题所示, Quartz.net + testing with SystemTime.UtcNow.

我可能是错的,但我认为 F# 中的代码应该是:

SystemTime.Now = fun () -> DateTime(someDate)
SystemTime.UtcNow = fun () -> DateTime(someDate)

但是我收到一个错误消息,关于参数过多或在不期望的地方使用了函数。如果我只使用 DateTime 构造函数,我会收到一个与它需要一个函数的事实相关的错误。

单个=是一个相等比较操作。如果要进行赋值,请使用 <- 赋值运算符。

除此之外,F# 函数与 Func<T> 不同。通常,当您将它们用作方法参数时,转换会自动发生,但在这种情况下,您似乎需要显式执行转换:

open System
open Quartz

SystemTime.Now <- 
    Func<DateTimeOffset>(
        fun () -> DateTimeOffset(DateTime(2015, 4, 18), TimeSpan.FromHours 2.))
SystemTime.UtcNow <- 
    Func<DateTimeOffset>(
        fun () -> DateTimeOffset(DateTime(2015, 4, 18), TimeSpan.FromHours 2.))

从 F# 调用它们也有点复杂:

> SystemTime.Now.Invoke();;
val it : DateTimeOffset = 18.04.2015 00:00:00 +02:00
> SystemTime.UtcNow.Invoke();;
val it : DateTimeOffset = 18.04.2015 00:00:00 +02:00