如果我正在爲我的團隊製作一個圖書館,這個圖書館將在多個項目之間共享,而圖書館正在開展工作,可以成爲async/await
的理想人選,我是否還應該包含非異步/等待版本的代碼?它看起來像很多重複的代碼,但我沒有看到任何替代方案。這僅僅是你有能力增加線程池利用率所付出的代價嗎?當我創建異步版本時,是否應始終包含同步版本的方法?
只是要清楚,我不是問我是否應該包含同步包裝方法,這是我所能找到的答案。
例如,我可能有一個長時間運行的SQL查詢。然後我需要用兩種幾乎相同的方法來實現這個接口,一種方法使用SqlConnection
和SqlCommand
上的async
方法,另一種方法不使用它們。這是正確的方法還是我錯過了什麼?
public interface ILongRunningOperation
{
Response LongRunningOperation();
Task<Response> LongRunningOperationAsync();
}
謝謝!
沒有。不要忘記,你也可以使用LongRunningOperation()的同步形式。達到相同的結果。這是一個晦澀的延伸,並且經常被忽視。 – JamieMeyer
博客文章[我應該公開異步方法的同步包裝?](https://blogs.msdn.microsoft.com/pfxteam/2012/04/13/should-i-expose-synchronous-wrappers-for-asynchronous-方法/)總結:「請儘量不要;如果必要的話,請將其留給您的方法的使用者;您應該考慮有人會同步使用您的功能的可能性,因此相應編碼,儘可能穿線的環境。「 – BACON
相關:[新庫中的異步與非異步方法](http://stackoverflow.com/q/25968037/150605) – BACON