首页 新闻 会员 周边

.NET中如何设置4小时后执行某个操作,只执行一次

0
悬赏园豆:80 [已解决问题] 解决于 2019-08-27 10:13

在.NET项目中设置4个小时后,进入下一个流程,这个操作只需要执行一次,不知道Quart.NET能不能实现,求教有没有别的方法。

兰茵的主页 兰茵 | 菜鸟二级 | 园豆:458
提问于:2019-08-20 15:49
< >
分享
最佳答案
0

定时器Timer

收获园豆:30
Shendu.CC | 老鸟四级 |园豆:2138 | 2019-08-20 16:16

这个怎么设置只执行一次啊,定时器好像都是设置的时间间隔

兰茵 | 园豆:458 (菜鸟二级) | 2019-08-20 16:17

@兰茵: 隔四个小时执行一次的函数,函数里最后写上 timer.Dispose(),试试

Shendu.CC | 园豆:2138 (老鸟四级) | 2019-08-20 16:20

@兰茵: 刚才试了一下,是可以的

  timer = new Timer(fun,null,TimeSpan.FromSeconds(4), TimeSpan.FromSeconds(4));
  void fun(object e)
        {
            Console.WriteLine("我执行了");
            timer.Dispose();
        }
Shendu.CC | 园豆:2138 (老鸟四级) | 2019-08-20 16:25
其他回答(6)
0

可。

直接写代码,开一个线程(或者现成的线程时钟)没几行代码,最好别用Sleep去做。

收获园豆:20
花飘水流兮 | 园豆:13560 (专家六级) | 2019-08-20 16:10

用线程等待吗

支持(0) 反对(0) 兰茵 | 园豆:458 (菜鸟二级) | 2019-08-20 16:18

@兰茵: 线程Timer是一回事,比较友好的方式Task.Run(()=>{while(interval<4小时){interval+=?,Sleep(看精确度)}跳出然后干它})

支持(0) 反对(0) 花飘水流兮 | 园豆:13560 (专家六级) | 2019-08-20 16:22

 要想更精确,那么可以中间加点其他方式,比如起始时间和当前时间,如果还要准确你可以StopWatch

支持(0) 反对(0) 花飘水流兮 | 园豆:13560 (专家六级) | 2019-08-20 16:24
0

就用quartz.net做吧。

收获园豆:5
清海扬波 | 园豆:825 (小虾三级) | 2019-08-20 16:11

我看quart.net都是在Global里面配置的,我这个应该不是程序一启动就执行,而是通过上一个操作之后才开始计时的,这个能写在方法里面吗

支持(0) 反对(0) 兰茵 | 园豆:458 (菜鸟二级) | 2019-08-20 16:15

@兰茵: 能否单独做一个小工具,B/S容易被回收而不会触发。

支持(0) 反对(0) 清海扬波 | 园豆:825 (小虾三级) | 2019-08-21 10:08
0

用fluentscheduler实现超级简单:
https://www.cnblogs.com/bluesummer/p/9041802.html

收获园豆:5
balahoho | 园豆:2050 (老鸟四级) | 2019-08-20 17:50
0

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);

看这段代码,你可以在任何地方向里面添加任务极其触发器

收获园豆:20
通信的搞程序 | 园豆:1747 (小虾三级) | 2019-08-20 18:47
0

Quart.NET 百度下,就知道只有想不到的做法,没有做不到的...

拾梦小侠ด้้้ | 园豆:713 (小虾三级) | 2019-08-21 17:37
0

System.Timers.Timer的AutoReset = true,就可以只执行一次了。

日常上班犯困 | 园豆:192 (初学一级) | 2019-08-27 18:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册