[英]ConfigureAwait(false) needed with threadpool threads?
假設我不在乎同步上下文,當我已經在ThreadPool
線程中時,是否需要在await調用上使用.ConfigureAwait(false)
? 例如,我通過以下方式開始了異步操作:
await Task.Run(() => myService.DoSomething());
我知道重要的是,如果您不關心上下文,並且您位於UI線程或ASP.NET請求中,只是想知道它是否對異步操作提供了同樣的好處,而不是那些情況。
如果存在當前的同步上下文(即使運行代碼的線程是線程池線程),則將使用它。 如果您不希望使用該同步上下文,則需要使用ConfigureAwait(false)
。 如果沒有當前的同步上下文,則ConfigureAwait(false)
不會執行任何操作,因為沒有要捕獲的同步上下文,並且您是否擁有它無關緊要。 如果要捕獲同步上下文(無論當前線程是否是線程池線程),那么就不要調用ConfigureAwait
。
簡而言之,是否作為線程池線程運行與是否應捕獲同步上下文的決定無關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.