2014-10-09 120 views
1

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

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

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

回答

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