所以我刚刚开始学习活动,并且我已经创建了一个PeriodicTick
课程,该课程继承自我写过的Tick
课程。现在我觉得它运作正常,但我想我之前读过,使用Thread.Sleep()
总是一个坏主意现在我在单独的任务中使用它所以不应该是并行化的任何问题。
尽管如此,我的问题是,在这种情况下,使用Thread.Sleep()
是否合适,如果没有,是否有任何其他简单的解决方案可以让我实现同样的目标?
class Tick
{
#region Fields & Properties
public delegate void TickHandler();
static int ctr = new int();
public readonly int ID;
public event TickHandler OnTick;
public bool isActive;
#endregion
public Tick()
{
ID = ctr++;
}
public virtual void Start()
{
OnTick();
}
}
class PeriodicTick : Tick
{
int tickTimer;
public Predicate<PeriodicTick> TickUntil { get; set; }
public PeriodicTick(int tickTimer, Predicate<PeriodicTick> tickUntil)
{
this.tickTimer = tickTimer;
TickUntil = tickUntil;
}
public override void Start()
{
Task TickTimer = Task.Factory.StartNew(
() =>
{
while (TickUntil.Invoke(this))
{
System.Threading.Thread.Sleep(tickTimer);
base.Start();
}
});
}
}
}