在.NET项目中设置4个小时后,进入下一个流程,这个操作只需要执行一次,不知道Quart.NET能不能实现,求教有没有别的方法。
定时器Timer
这个怎么设置只执行一次啊,定时器好像都是设置的时间间隔
@兰茵: 隔四个小时执行一次的函数,函数里最后写上 timer.Dispose(),试试
@兰茵: 刚才试了一下,是可以的
timer = new Timer(fun,null,TimeSpan.FromSeconds(4), TimeSpan.FromSeconds(4));
void fun(object e)
{
Console.WriteLine("我执行了");
timer.Dispose();
}
可。
直接写代码,开一个线程(或者现成的线程时钟)没几行代码,最好别用Sleep去做。
用线程等待吗
@兰茵: 线程Timer是一回事,比较友好的方式Task.Run(()=>{while(interval<4小时){interval+=?,Sleep(看精确度)}跳出然后干它})
要想更精确,那么可以中间加点其他方式,比如起始时间和当前时间,如果还要准确你可以StopWatch
就用quartz.net做吧。
我看quart.net都是在Global里面配置的,我这个应该不是程序一启动就执行,而是通过上一个操作之后才开始计时的,这个能写在方法里面吗
@兰茵: 能否单独做一个小工具,B/S容易被回收而不会触发。
https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/jobs-and-triggers.html
// define the job and tie it to our HelloJob class
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity("myJob", "group1") // name "myJob", group "group1"
.Build();
// Trigger the job to run now, and then every 40 seconds
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("myTrigger", "group1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(40)
.RepeatForever())
.Build();
// Tell quartz to schedule the job using our trigger
await sched.scheduleJob(job, trigger);
看这段代码,你可以在任何地方向里面添加任务极其触发器
Quart.NET 百度下,就知道只有想不到的做法,没有做不到的...
System.Timers.Timer的AutoReset = true,就可以只执行一次了。