【发布时间】:2020-07-15 09:05:38
【问题描述】:
目标
有两种方法:Add() 和 Remove()。
Add() 方法每 X 秒发生一次,直到被用户停止;添加 反对DB;等待 N 秒;调用 Remove();
Remove() 方法由 Add() 方法调用并删除由 Add() 方法添加的对象 Add() 方法。
我的代码
static bool keepGoing = true;
static System.Timers.Timer AddMethodTimer= new System.Timers.Timer();
static System.Timers.Timer RemoveMethodTimer = new System.Timers.Timer();
private static void Execute()
{
if (!keepGoing)
{
AddMethodTimer.Stop();
RemoveMethodTimer.Stop();
}
else
{
AddMethodTimer.Interval = 30; // X = 30
RemoveMethodTimer.Interval = 5; // N = 5
AddMethodTimer.Elapsed += new ElapsedEventHandler(Add);
AddMethodTimer.Start();
Thread.Sleep(RemoveMethodTimer.Interval)//In this case, N=5;
RemoveMethodTimer.Elapsed += new ElapsedEventHandler(Remove);
}
}
private static void Add(object source, ElapseEventArgs e)
{
//add operation
}
private static void Remove(object source, ElapseEventArgs e)
{
//remove operation
}
用户只能更改“keepGoing”变量。如果它是假的,计时器应该停止。整个代码在更改时触发(我有一个处理它的帖子 IActionResult。它工作正常。当 keepGoing 更改时,它会输入我提供的代码)。
注意 : 如果对象被插入到 DB 并且用户使 keepGoing 为 false,Remove() 将不会被执行
【问题讨论】:
-
重用同一个定时器,设置第一个经过的事件的时间间隔。更好的是使用异步。
await Task.Delay(30); AddMethodTimer(); await Task.Delay(5); RemoveMethodTimer() -
@Fildor 我的坏人会编辑它。第一个“添加”称为 Execute
-
1 问题:如果对象已插入数据库但尚未删除,而现在用户将“keepGoing”切换为 false,该怎么办。 1.
Remove是否会如期执行? 2.Remove立即执行?或者3.Remove根本不被执行? -
如果要异步,则不需要计时器。
-
@Fildor 会的。
标签: c# asp.net-core .net-core system.timers.timer