我需要调用多个异步方法,并在其中调用另一个异步方法。 让我演示一下
private async void button1_Click(object sender, EventArgs e)
{
for(int i = 0; i< 100; i++)
{
await Method1();
}
}
public async Task Method1()
{
await Task.Delay(3*1000);
await Method2();
}
public async Task Method2()
{
await Task.Delay(10*1000);
}
我的问题是,for 语句仅在等待 Method2 开始后才激活迭代,而我想要的是一次性创建 100 个任务。其他一切都将异步完成。
最佳答案
我认为您对“等待”的含义感到困惑。 “await”的意思是“开始异步处理这件事情,当它滴答作响时,回到windows消息循环并继续处理消息,以便UI不断重新绘制。当异步任务完成时,拿起我等待的代码”。
所以当你在这样的循环中await
时,你是在说:
- 开始第一个异步作业...
- 并且在它运行时,继续处理消息循环。
- 当第一个异步作业完成时...
- 在我们等待的循环中接电话。我们绕着循环……
- 开始第二个异步作业...
如果这不是您想要的,那么不要等待任务。如果您想启动一百个并发运行的任务,那么启动一百个任务并且不要等待它们中的任何一个。为什么点击处理程序中有 any await?
关于c# - 如何在不停止的情况下在另一个异步方法中创建调用异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16201826/