【问题标题】:C# timer and network call in parallelC# 定时器和网络调用并行
【发布时间】:2017-07-09 11:10:27
【问题描述】:

我想让Timer 运行 5 秒,同时向后端发起网络请求。然后我想在执行操作之前等待计时器和请求完成。

private async void doWork()
{
    await Task.Delay(5000);
    await doPostRequest();
    doSomethingElse();
}

类似于上面的代码,除了这两个任务并行执行。我该怎么做?

【问题讨论】:

    标签: c# multithreading async-await parallel.foreach


    【解决方案1】:

    您可以为此使用Task.WhenAll

    private async void doWork()
    {
        await Task.WhenAll(
          Task.Delay(5000),
          doPostRequest());
        doSomethingElse();
    }
    

    还有一个 Task.WhenAny 会在其中一个完成后立即完成。

    您是否有意不从此方法返回任务?你现在不能等待doWork 本身。

    【讨论】:

    • 是的,这是故意的。在这种情况下,我不需要从doWork 中取回任何东西。谢谢!
    • @nassan:您应该avoid async void 有几个原因。没有结果的异步方法的适当返回类型是Task,而不是void
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    相关资源
    最近更新 更多