如果没有Thread.Sleep,我该怎么做?

时间:2014-03-12 15:54:36

标签: c# multithreading events

所以我刚刚开始学习活动,并且我已经创建了一个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();
                }
            });
    }
}

}

1 个答案:

答案 0 :(得分:2)

.NET 4.5引入了Task.Delay(Int32),这将是处理任务延迟的正确方法。

thread-sleep-vs-task-delay