如何在异步方法中休眠或阻止执行。Thread.Sleep 不起作用



我有一个异步方法,它的签名如下:

public static async void Run(..)
{
//..
var responseMessage = await client.PostAsync(..);
// ..
using (Stream stream = await responseMessage.Content.ReadAsStreamAsync())
//...
Thread.Sleep(5000);
}

我可以在我的控制台应用程序中使用这种方法,如下所示:

static async Task Main(string[] args)
{
for(int x = 1; x < 100; x++)
{
Run(...);
}  
}

由于速率限制,我想在Run方法中阻止/睡眠,我该怎么做?

我试过这个:

public static async void Run(...)
{
// ...
Thread.Sleep(5000);
}

但这似乎没有起到任何作用。有人能解释一下为什么不起作用以及正确的方法吗?

使用async模式时需要使用Task.Delay:

static async Task Main(string[] args)
{
for(int x = 1; x < 100; x++)
{
await Run(...);
}  
}
public static async Task Run(...)
{
// ...
await Task.Delay(5000);
}

注意:我还将您的Run方法更改为async,以便可以等待它。此外,async void通常是个坏主意,通常只应在编写事件处理程序时执行。

最新更新