用不太强烈的东西替换thread.sleep

时间:2017-07-26 01:30:03

标签: c#

所以我已经了解到我之前的解决方案是拥有" Thread.Sleep"遍布我的C#控制台应用程序(由于等待网页做了我总是无法通过Selenium / Chromedriver的正常WebDriverWa达到的东西)不是一个好的解决方案,因为它冻结了整个线程的整个持续时间睡眠期。

因为我不应该这样做: System.Threading.Thread.Sleep(250); 那我该怎么办?我希望它是一个单独的声明,而不是东西的包装器,因为这真的很快就会变得非常混乱。我有几十个使用Thread.Sleep的地方。但显然我可以使用整个类来完成它 - 如果有必要,我只是希望能够像普通方法一样调用它。

到目前为止,这是我找到的最好的工作:

class Tools
{
    private static async Task _Sleep(int ms)
    {
        await Task.Delay(ms);
    }

    public static void Sleep(int ms)
    {
        var task = _Sleep(ms);
        task.Wait();
    }
}

我应该用其他东西替换那个吗?

1 个答案:

答案 0 :(得分:2)

很少有充分理由使用任何形式的睡眠。 在1000个中的999个案例中,编码很糟糕。 而不是等待任意数量的时间,你应该等待所需的确切时间。 例如,你应该使用:

await MyFunction();

或回调/事件处理函数,如

WebBrowser wb = new WebBrowser();
wb.DocumentCompleted += Wb_DocumentCompleted;
...
private void Wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
 {
   //do your thing...
 }