从同步任务调用方法的异步或同步版本更好吗?

时间:2014-10-09 19:19:54

标签: c# asynchronous threadpool

如果我在同步任务中运行代码,是否最好调用方法的异步版本并等待结果或只调用代码的同步版本?

也就是说,如果我使用myMethod1或myMethod2创建新任务,我会使用更少的资源吗?

public void SomeFunc() {
  // Wrapper code
  Task myTask = new Task(myMethod1);
  myTask.Run();
  // Do stuff
  myTask.Wait();
}

private void myMethod1() {
  CloudQueueMessage message = myCloudQueue.GetMessage();
  // do stuff
}

private void myMethod2() {
  CloudQueueMessage message = myCloudQueue.GetMessageAsync().Result;
  // do stuff
}

我想知道在异步操作运行时是否以某种方式使用异步版本使线程池上的线程可用。

1 个答案:

答案 0 :(得分:2)

  

我想知道在异步操作运行时是否以某种方式使用异步版本使线程池上的线程可用。

只有在异步执行此操作时才会有效。由于您在任务上调用.Result,因此您在等待时阻止该线程。因此,在该代码中使用异步版本没有任何好处。

如果这是整个目标,那么写下来会好得多:

public async Task SomeFunc() {
  // Wrapper code
  Task myTask = MyMethod1;
  // Do stuff
  await myTask;
}

private async Task myMethod1() {
   CloudQueueMessage message = await myCloudQueue.GetMessageAsync();
   // do stuff
}

这会使所有内容保持异步,包括您的Task