【问题标题】:Would this run async?这会异步运行吗?
【发布时间】:2019-03-27 03:01:29
【问题描述】:

我正在做两个可以(理想情况下)同时运行的调用。第一个调用最终会访问数据库,第二个调用最终会访问 Web API。问题是两个执行路径都不是异步的。我一直在尝试更熟悉 TPL,但还没有完全成熟。如果我将这两个方法调用包装在 Tasks 中并等待它们,这真的会同时执行吗?

【问题讨论】:

  • 定义async,你为什么要它,你希望用它实现什么。
  • 没有一个真实的例子,没有人能神奇地回答一个关于代码的理论问题。 (例如,我有一辆车辆,它可以开50 mph吗?谁知道要抽象出一个具体的答案。)
  • 目标是让数据库查询和 api 调用同时运行,这样如果查询需要 1 秒,api 调用 0.5 秒,则净运行时间将是最长的两者而不是总和。
  • @erikPhillips 我不明白我如何拥有样板服务和 repo 层代码以某种方式使其更具体。这是一个非常简单的操作。
  • 你混淆了async (Async Await Pattern) 和 Asynchronous,是的,你可以让两者都运行 Asynchronously 使用任务或 Async Await 模式,前提是它们不相互依赖

标签: c# .net async-await task-parallel-library


【解决方案1】:

您混淆了async (Async Await Pattern) 和 Asynchronous,是的,您可以使用任一 Asynchronously >tasks 和/或 Async Await 模式,前提是它们不相互依赖

public async Task DoMagicStuff()
{       
    var task1 = DoDbAsync(); // Start Task
    var task2 = DoWebAsync();// Start Task

    // wait for both
    await Task.WhenAll(task1,task2);
}

IOCPU限制的混合工作

public async Task DoMagicStuff()
{

    var task1 = DoDbAsync(); // Start Task
    var task2 = Task.Run(() => DoWebAsync());// Start Task

    // wait for both
    await Task.WhenAll(task1,task2);
}

或者没有async,你可以使用Task.WaitAll

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 2016-04-26
    • 2023-04-11
    • 2019-04-21
    • 1970-01-01
    相关资源
    最近更新 更多