我一直在使用異步/等待,但最近深入研究,並閱讀了很多最佳實踐技巧,默認情況下總是使用ConfigureAwait(false)來防止死鎖並提高性能。只是想確保我不會錯過某些東西,當我認爲這隻適用於當前正在播放的實際當前SynchronizationContext或TaskScheduler時,是正確的?如果我有一個響應消息/命令/等的Windows服務應用程序。異步地,它總是使用默認調度程序=可能是相同的線程池線程,等待完成的線程將執行延續,因此使用ConfigureAwait(false)時沒有死鎖和性能差異,是正確的嗎?這不是我不能把它放在那裏,但我討厭這麼多噪音代碼...Console/Win服務應用程序中不需要ConfigureAwait(false),對吧?
8
A
回答
7
一般來說,這是真的。在控制檯或服務方案中工作時,沒有安裝SynchronizationContext
(默認爲),因此ConfigureAwait
中的continueOnCapturedContext
選項將不起作用,這意味着您可以在不更改運行時行爲的情況下安全地將其刪除。
但是,可能會有例外,所以我經常會建議在適當的時候編寫代碼,包括ConfigureAwait(false)
。
包括本即使在控制檯或服務應用程序的主要優點是:
- 的代碼變爲在其他應用中可重複使用後。如果您選擇重複使用此代碼,則無需追蹤由於不包含此問題而導致的錯誤。
- 如果您正在運行時安裝(或使用安裝庫)
SynchronizationContext
,則方法的行爲不會改變。
相關問題
- 1. 在Windows服務中使用ConfigureAwait(false)?
- 2. HttpMessageHandler應該使用ConfigureAwait(false)
- 3. 庫類型遠程Web服務調用和HttpClient ConfigureAwait(false)
- 4. 爲什麼Java應用程序需要應用程序服務器來託管?
- 5. 應用程序不需要中斷
- 6. 需要爲IOS應用程序啓用服務器端訪問
- 7. 幾個應用程序需要訪問「一箇中央服務器程序」
- 8. 如何指定我的應用程序絕對需要位置服務啓用?
- 9. 爲什麼Android Market應用程序需要C2DM服務?
- 10. 需要爲Laravel移動應用程序推送服務
- 11. 桌面應用程序需要服務器端調試
- 12. Facebook應用程序需要服務器嗎?
- 13. 需要一個應用程序服務器 - Java
- 14. 需要有關客戶機/服務器的Windows應用程序
- 15. 我的android應用程序需要一個服務嗎?
- 16. 處理需要Web服務的應用程序 - 處理EndpointNotFoundExceptions
- 17. 我需要什麼樣的網絡服務器應用程序?
- 18. 實時應用程序需要推送服務建議
- 19. 我是否需要爲iphone應用程序購買服務器?
- 20. Web服務需要執行訪問應用程序
- 21. ASP.NET死鎖儘管ConfigureAwait(false)
- 22. 分離Web服務器和應用程序服務器,都需要Java?
- 23. iOS應用程序需要使用不同的框架來使用Web服務
- 24. 應用程序如何連接到服務器而不需要使用portforwarding?
- 25. iPad應用程序需要
- 26. 需要Web服務教程
- 27. 應用程序對象和服務
- 28. 我的應用程序不需要gui並以特定間隔啓動服務
- 29. 從應用程序服務器根服務GWT應用程序
- 30. Application.MainFormOnTaskbar:= False;不從任務欄中隱藏應用程序
最好你應該編寫模塊化的代碼,並不在乎它是否在控制檯,windows服務,ASP.NET網站或窗口項目中運行(所以你應該把它放在因爲你的代碼可以在需要它的情況下運行),但有時你會知道它不會在這些情況下使用(所以不可以,你不應該把它放進去)。它是編碼風格的問題。 – 2014-09-12 22:23:28