2014-10-09 155 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