没有使用Thread.sleep()

时间:2016-07-08 06:09:58

标签: c# .net multithreading multidimensional-array

我编写了一个客户端应用程序,我使用的是主线程以外的两个线程。后台线程用于通过TCP IP接收数据,而接收后我调用另一个线程,将使用for连续显示接收到的数据loop.But每次迭代后,for循环需要等待30秒。我使用了Thread.sleep(30000),但不知道为什么它不工作,有时它会在30秒之前从睡眠模式唤醒。我使用的是dot net框架4.请提出其他一些备选方案。

 for(n=0;n<=m;n++)
 {
   //show data;
   //wait for 30 seconds
 } 

1 个答案:

答案 0 :(得分:3)

计时器在.NET中不准确。你可能不会完全得到30000。

您可以使用Thread.Sleep(30000);或await Task.Delay(30000),但您需要将方法标记为async;

区别在于Thread.Sleep阻止当前线程,而Task.Delay则不阻止。

public async Task MyMethod()
{
    int n;
    int m = 100;

    for(n=0; n<=m; n++)
    {
        //show data;
        //wait for 30 seconds
        await Task.Delay(30000);
    }
}

对于.NET 4,您可以使用此alternative

public static Task Delay(double milliseconds)
{
    var tcs = new TaskCompletionSource<bool>();
    System.Timers.Timer timer = new System.Timers.Timer();
    timer.Elapsed += (obj, args) =>
    {
        tcs.TrySetResult(true);
    };
    timer.Interval = milliseconds;
    timer.AutoReset = false;
    timer.Start();
    return tcs.Task;
}