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

  • 本文关键字:替换 thread sleep c#
  • 更新时间 :
  • 英文 :


所以我了解到,我以前的解决方案是在我的C#控制台应用程序中使用"Thread.Sleep"(由于等待网页执行我总是无法用Selenium/Chromedriver的普通WebDriverWaits到达的事情(不是一个好的解决方案,因为它在整个睡眠期间冻结整个线程。

因为我不应该这样做: 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();
}
}

我应该用别的东西代替那个吗?

很少有很好的理由使用任何形式的睡眠。 在 1000 个案例中的 999 个案例中,它是糟糕的编码。 与其等待任意时间,不如等待所需的确切时间。 例如,您应该使用:

await MyFunction();

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

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

最新更新