在中间退出Thread.Sleep的最佳方法

dav*_*hol 2 c# multithreading

我有一些操作,有时我想停在中间:

bool contine;
foreach (var item in this)
{
    if (contine)
    {
        // do my stuss
    }
}   
Run Code Online (Sandbox Code Playgroud)

这里的问题,foreach有时我需要特定的延迟时间,所以我正在使用Thread.Sleep.因此,当我停止我的操作以防我仍在其中时,Thread.Sleep我的应用程序正在等到此Thread.Sleep结束并且只停止我的操作所以我可以从Thread.Sleep中间退出吗?

更新

我需要特定睡眠的原因是因为我正在播放数据包,并且每个数据包之间都有一个Time stamp因此这就是我需要这个睡眠的原因.

M.k*_*ary 6

您可以使用也可以取消的Task.Delay.

private void Method(CancellationToken token)
{
    foreach (var item in this)
    {
        if (!token.IsCancellationRequested)
        {
            // do my stuss

            Task.Delay(1000, token).Wait(); // use await for async method
        }
        else break; // end
    }
}
Run Code Online (Sandbox Code Playgroud)

当你想打电话

var source = new CancellationTokenSource();
Method(source.Token);
Run Code Online (Sandbox Code Playgroud)

当你想取消.

source.Cancel();
Run Code Online (Sandbox Code Playgroud)

  • @davidhol 你必须创建一个新的。它也在这里回答。http://stackoverflow.com/a/9332634/4767498 (2认同)