C#定时器和网络并行呼叫

nas*_*san 1 c# multithreading async-await parallel.foreach

我希望Timer运行5秒钟,同时向后端启动网络请求.我想在执行操作之前等待计时器和请求完成.

private async void doWork()
{
    await Task.Delay(5000);
    await doPostRequest();
    doSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)

像上面的代码一样,除了让这两个任务并行执行.我怎样才能做到这一点?

Pet*_*ons 5

你可以用Task.WhenAll它:

private async void doWork()
{
    await Task.WhenAll(
      Task.Delay(5000),
      doPostRequest());
    doSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)

还有Task.WhenAny,一旦其中的一个完成完成.

您是否故意不从此方法返回任务?你doWork现在不能等待自己.

  • @nassan:你应该[避免`async void`](https://msdn.microsoft.com/en-us/magazine/jj991977.aspx)有几个原因.没有结果的异步方法的适当返回类型是`Task`,而不是`void`. (3认同)