簡體   English   中英

從同步Task調用方法的異步或同步版本更好嗎?

[英]Is it better to call async or synchronous versions of a method from a synchronous Task?

如果我在同步Task中運行代碼,則最好是調用方法的異步版本並等待結果,還是只調用代碼的同步版本?

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

我想知道使用異步版本是否在異步操作運行時使線程再次在線程池上可用。

我想知道使用異步版本是否在異步操作運行時使線程再次在線程池上可用。

僅當您異步執行此操作時,此方法才有效。 由於您要在任務上調用.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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM