【问题标题】:Is it better to call async or synchronous versions of a method from a synchronous Task?从同步任务中调用方法的异步或同步版本更好吗?
【发布时间】:2014-12-04 20:23:39
【问题描述】:

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

也就是说,如果我使用 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
}

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

【问题讨论】:

    标签: c# asynchronous threadpool


    【解决方案1】:

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

    这只有在您异步执行此操作时才有效。由于您在任务上调用.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

    【讨论】:

      猜你喜欢
      • 2015-03-08
      • 2017-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-15
      相关资源
      最近更新 更多