2014-04-18 78 views
6

我正在考慮通過ObjectCache類實現一些分佈式緩存客戶端(Redis & Memcached)。我注意到的一件事是,這個抽象類的所有方法都是同步的,這意味着它們都不返回任務。由於在分佈式緩存中獲取或放入東西的調用將離開本地機器幷包含網絡旅程,因此我想使用這些操作的異步版本。那麼.Net框架中是否有標準緩存類,如支持異步模式的CacheObject?ObjectCache的異步版本?

回答

2

雖然有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 /刪除的方法和它的運作良好。

I posted this code on github

+0

一個小的建議:在'Async'中結束名稱以遵循[常見模式](http://msdn.microsoft.com/zh-cn/library/hh873175.aspx)。 –

2

使用附帶ParallelExtensionsExtras NuGet包的AsyncCache類:

http://www.nuget.org/packages/MSFT.ParallelExtensionsExtras/1.2.0

+0

感謝您的鏈接,對於其他讀者,這裏是一個很好的緩存類概述:http://blogs.msdn.com/b/pfxteam/archive/2010/04/23/10001621.aspx –

+1

在看了包含在並行擴展庫中的AsyncCache類,它沒有像我期望的那樣工作。我期待異步版本的Get/Put/Remove操作 - 沒有發現。所以我結束了自己的接口,像這樣:public interface IAsyncCache { Task Initialize(Dictionary parameters); 任務Put(字符串鍵,T值,TimeSpan lifeSpan); 任務 Get(string key); 任務刪除(字符串鍵); }' –