我正在考慮通過ObjectCache類實現一些分佈式緩存客戶端(Redis & Memcached)。我注意到的一件事是,這個抽象類的所有方法都是同步的,這意味着它們都不返回任務。由於在分佈式緩存中獲取或放入東西的調用將離開本地機器幷包含網絡旅程,因此我想使用這些操作的異步版本。那麼.Net框架中是否有標準緩存類,如支持異步模式的CacheObject?ObjectCache的異步版本?
回答
雖然有AsyncCache由@TrevorBrooks提到的並行擴展包,它沒有工作,我所期望的方式。我需要使用可能正在等待的任務來從分佈式緩存中放入/獲取/移除項目。所以,我結束了創建如下界面:
public interface IAsyncCache<T>
{
Task Initialize(Dictionary<string, string> parameters);
Task Put(string key, T value, TimeSpan lifeSpan);
Task<T> Get(string key);
Task Remove(string key);
}
因爲我已經能夠實現這個接口對幾種緩存提供商,提供任務/異步版本的GET/PUT /刪除的方法和它的運作良好。
使用附帶ParallelExtensionsExtras NuGet包的AsyncCache類:
http://www.nuget.org/packages/MSFT.ParallelExtensionsExtras/1.2.0
感謝您的鏈接,對於其他讀者,這裏是一個很好的緩存類概述:http://blogs.msdn.com/b/pfxteam/archive/2010/04/23/10001621.aspx –
在看了包含在並行擴展庫中的AsyncCache類,它沒有像我期望的那樣工作。我期待異步版本的Get/Put/Remove操作 - 沒有發現。所以我結束了自己的接口,像這樣:public interface IAsyncCache
- 1. Google API的異步版本?
- 2. 異步方法的同步版本
- 3. 爲什麼我的程序的異步版本比同步版本慢?
- 4. 定時異步瀑布版本
- 5. 在異步版本中包裝同步調用
- 6. 從同步任務調用方法的異步或同步版本更好嗎?
- 7. JavaScript異步/等待版本與Promise版本的功能不起作用
- 8. ObjectCache不含一貫
- 9. 元組對與REF/out參數的方法的異步版本
- 10. angular.io指南中的動態窗體示例的異步版本
- 11. iOS版 - 異步NSURLConnection的內部的NSOperation
- 12. 當我創建異步版本時,是否應始終包含同步版本的方法?
- 13. System.Collections.Generic.SortedList的同步版本?
- 14. node.js http.get的同步版本
- 15. 什麼水平的ObjectCache在
- 16. 異步vim腳本?
- 17. 異步jquery腳本
- 18. 如何從異步PCL版本的SQLite中使用SQLiteAsyncConnection?
- 19. 使用帶結果的異步版本實現函數
- 20. CloudBlockBlob上傳的非異步版本是否被棄用
- 21. 製作此異步方法的通用版本
- 22. 需要幫助以製作「循環」的異步版本
- 23. 爲什麼ElementAt的異步版本不存在?
- 24. 異步/等待着一個WinForms進度 - 的WinForms版本
- 25. 如何實現System.IO.Directory.CreateDirectory方法的異步/等待版本?
- 26. 爲什麼Node.js具有fs方法的異步和同步版本?
- 27. 異步異步
- 28. php版本差異
- 29. Android版本差異
- 30. Eclipse版本差異
一個小的建議:在'Async'中結束名稱以遵循[常見模式](http://msdn.microsoft.com/zh-cn/library/hh873175.aspx)。 –