所以我已经了解到我之前的解决方案是拥有" 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();
}
}
我应该用其他东西替换那个吗?
答案 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...
}