簡體   English   中英

調用一個方法異步然后等待它,有好處嗎?

[英]Call a method async and then wait for it, are there benefits?

我正在查看一些執行以下操作的代碼:

Task<SomeType> t1 = 
    Task.Factory.StartNew(() => Service.GetSomething(readQuery, contextId));
Task.WaitAll(t1);

僅執行一個異步任務然后等待它是否有好處? 執行時間將是相同的(如果由於異步會增加一些開銷而不是更多),但也許在處理器級別會有所不同嗎?

我只是想弄清楚該代碼是否是不必要的(我認為是必需的),以及是否可以將其更改為簡單的調用,謝謝您的想法。

僅執行一個異步任務然后等待它是否有好處? 執行時間將是相同的(如果由於異步會增加一些開銷而不是更多),但也許在處理器級別會有所不同嗎?

通常,沒有好處(和額外的開銷), 除非您在開始執行任務時和阻塞等待任務之間執行其他工作。

在某些情況下可能會有好處,但是只有當您使用特定的TaskScheduler調度Task時,這才是正確的,該TaskScheduler以特定的方式卸載工作(即:將任務推送到UI線程上)。

另外-通常,如果等待單個任務,而不是使用Task.WaitAll ,則可以調用Wait() (或獲取Task<T>Result ):

// Just block until it's done
t1.Wait();

// OR:

// Block then get the result
SomeType result = t1.Result;

Task.WaitAll()實際上僅在您等待多個任務時才適用。

暫無
暫無

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

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