c# - 如何在不停止的情况下在另一个异步方法中创建调用异步方法

标签 c# winforms .net-4.5 async-await

我需要调用多个异步方法,并在其中调用另一个异步方法。 让我演示一下

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/

相关文章:

c# - 无法在设计时编辑 Point[] 或 List<Point>

c# - 为什么我应该使用 IDisposable 而不是在 c# 中使用?

c# - 使用 .NET 4.5 构建的应用程序可以在 .NET 4.0 上运行吗?

.net - 如何在运行时检测 .NET 4.5 版当前正在运行您的代码?

c# - 如何在 nopCommerce c# 中将存储过程转换为 linq

c# - 我可以使用 LINQ 检查列表中的对象是否具有唯一 ID 吗?

c# - 如何在多个 View 之间共享一个绑定(bind)值?

c# - 将字符串替换为 DataTable 的 DataColumn 中的另一个字符串

c# - 无法通过 DataBoundItem 更新 DataGridView 单元格?

c# - 使用存储在数据库中的图像路径检索图像并显示在图片框中 C#