如何将Quartz.net与F#一起使用

发布于 2025-01-21 16:50:48 字数 1079 浏览 2 评论 0原文

我不能让f#基于 this

open System
open Quartz
open Quartz.Impl

let schedulerFactory = StdSchedulerFactory()
let scheduler  = schedulerFactory.GetScheduler()
scheduler.Start()

type Job () =

    interface IJob with

        member x.Execute(context: IJobExecutionContext) =
            task{       //
                Console.WriteLine(DateTime.Now)
            }

let job = JobBuilder.Create<Job>().Build() //Exception Unhandled error!

let trigger =
    TriggerBuilder.Create()
        .WithSimpleSchedule(fun x ->
            x.WithIntervalInSeconds(1).RepeatForever() |> ignore)
        .Build()

scheduler.Result.ScheduleJob(job, trigger) |> ignore
Threading.Thread.Sleep(10000000)
Console.ReadKey()|>ignore

它给出了行的运行时错误让Job = JobBuilder.Create&lt; Job&gt;()。build() system.invalidoperationException:''start不可能在完成的任务上调用。”

我还必须将调度程序.schedulejob更改为schedul.result.schedulejob(..从上面的原始示例中。

I cannot make F# to schedule simple scheduler based on this .

open System
open Quartz
open Quartz.Impl

let schedulerFactory = StdSchedulerFactory()
let scheduler  = schedulerFactory.GetScheduler()
scheduler.Start()

type Job () =

    interface IJob with

        member x.Execute(context: IJobExecutionContext) =
            task{       //
                Console.WriteLine(DateTime.Now)
            }

let job = JobBuilder.Create<Job>().Build() //Exception Unhandled error!

let trigger =
    TriggerBuilder.Create()
        .WithSimpleSchedule(fun x ->
            x.WithIntervalInSeconds(1).RepeatForever() |> ignore)
        .Build()

scheduler.Result.ScheduleJob(job, trigger) |> ignore
Threading.Thread.Sleep(10000000)
Console.ReadKey()|>ignore

It gives runtime error for line let job = JobBuilder.Create<Job>().Build() System.InvalidOperationException: 'Start may not be called on a task that has completed.'

I also have had to change the scheduler.ScheduleJob to the scheduler.Result.ScheduleJob(.. from the original example above.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

〃安静 2025-01-28 16:50:48

基于本特指出的文档,我认为这应该做到,使用task builder f#6:

open System
open System.Threading.Tasks

open Quartz
open Quartz.Impl

type Job() =
    interface IJob with
        member _.Execute(_context) =
            Console.Out.WriteLineAsync(DateTime.Now.ToString())

task {
    // Grab the Scheduler instance from the Factory
    let factory = StdSchedulerFactory()
    let! scheduler = factory.GetScheduler()

    // and start it off
    do! scheduler.Start()

    // define the job and tie it to our Job class
    let job =
        JobBuilder.Create<Job>()
            .WithIdentity("job1", "group1")
            .Build()

    // Trigger the job to run now, and then repeat every second
    let trigger =
        TriggerBuilder.Create()
            .WithIdentity("trigger1", "group1")
            .StartNow()
            .WithSimpleSchedule(fun x ->
                x.WithIntervalInSeconds(1).RepeatForever()
                    |> ignore)
            .Build()

    // Tell quartz to schedule the job using our trigger
    let! _offset = scheduler.ScheduleJob(job, trigger)

    // some sleep to show what's happening
    do! Task.Delay(TimeSpan.FromSeconds(10))

    // and last shut down the scheduler when you are ready to close your program
    do! scheduler.Shutdown()
} |> ignore

Console.ReadLine() |> ignore

输出是类似的:

4/16/2022 6:11:52 PM
4/16/2022 6:11:52 PM
4/16/2022 6:11:53 PM
4/16/2022 6:11:54 PM
4/16/2022 6:11:55 PM
4/16/2022 6:11:56 PM
4/16/2022 6:11:57 PM
4/16/2022 6:11:58 PM
4/16/2022 6:11:59 PM
4/16/2022 6:12:00 PM
4/16/2022 6:12:01 PM

Based on the documentation that Bent pointed to, I think this should do it, using the task builder from F# 6:

open System
open System.Threading.Tasks

open Quartz
open Quartz.Impl

type Job() =
    interface IJob with
        member _.Execute(_context) =
            Console.Out.WriteLineAsync(DateTime.Now.ToString())

task {
    // Grab the Scheduler instance from the Factory
    let factory = StdSchedulerFactory()
    let! scheduler = factory.GetScheduler()

    // and start it off
    do! scheduler.Start()

    // define the job and tie it to our Job class
    let job =
        JobBuilder.Create<Job>()
            .WithIdentity("job1", "group1")
            .Build()

    // Trigger the job to run now, and then repeat every second
    let trigger =
        TriggerBuilder.Create()
            .WithIdentity("trigger1", "group1")
            .StartNow()
            .WithSimpleSchedule(fun x ->
                x.WithIntervalInSeconds(1).RepeatForever()
                    |> ignore)
            .Build()

    // Tell quartz to schedule the job using our trigger
    let! _offset = scheduler.ScheduleJob(job, trigger)

    // some sleep to show what's happening
    do! Task.Delay(TimeSpan.FromSeconds(10))

    // and last shut down the scheduler when you are ready to close your program
    do! scheduler.Shutdown()
} |> ignore

Console.ReadLine() |> ignore

Output is something like:

4/16/2022 6:11:52 PM
4/16/2022 6:11:52 PM
4/16/2022 6:11:53 PM
4/16/2022 6:11:54 PM
4/16/2022 6:11:55 PM
4/16/2022 6:11:56 PM
4/16/2022 6:11:57 PM
4/16/2022 6:11:58 PM
4/16/2022 6:11:59 PM
4/16/2022 6:12:00 PM
4/16/2022 6:12:01 PM
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文