2014-04-18 40 views
6

Bazı dağıtılmış önbellek istemcileri (Redis & Memcached) ObjectCache sınıfı aracılığıyla uygulamayı düşünüyorum. Fark ettiğim bir şey, bu soyut sınıftaki tüm yöntemlerin eş zamanlı olması, yani hiçbirinin Görevler döndürmemesidir. Dağıtılmış önbellek alma veya alma çağrıları yerel makineden uzakta olacağından ve bir ağ gezisi içerdiğinden, bu işlemlerin Async sürümlerini kullanmak isterim. Yani, Async kalıplarını destekleyen CacheObject gibi .Net çerçevesinde standart bir önbellek sınıfı var mı?ObjectCache'nin Async sürümü?

cevap

2

bir AsyncCache @TrevorBrooks tarafından bahsedilen paralel uzantıları paketinde olmamasına rağmen, beklediğim şekilde çalışmadı. Beklenen bir Görev ile dağıtılmış bir önbellek öğeleri koymak/almak/kaldırmak gerekiyordu. Bu yüzden aşağıdaki arayüz oluşturma bitti: O zamandan beri/onların get/koymak için Görev/zaman uyumsuz sürümünü sunmak birkaç önbellek sağlayıcıları karşı arabirimini uygulamak onun iyi çalışıyor yöntem ve kaldırmak mümkün olmuştur

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); 
} 

.

I posted this code on github.

+0

Bir küçük öneri: [ortak model] 'i (http://msdn.microsoft.com/en-us/library/hh873175.aspx) takip etmek için' Async''deki adları sonlandırın. –

2

Kullanım ParallelExtensionsExtras Nuget paketi ile birlikte AsyncCache sınıfı:

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

+0

link için teşekkürler, diğer okuyucular için burada önbellek sınıfının iyi bir bakış: http://blogs.msdn.com/b/pfxteam/archive/2010/04/23/10001621.aspx –

+1

Paralel uzantı kitaplığında bulunan AsyncCache sınıfı, beklediğim gibi çalışmadı. Get/Put/Remove işlemlerinin bir uyumsuz sürümünü bekledim - bunu bulamadım. Bu yüzden kendi ara yüzümü yuvarlamayı bitirdim: public interface IAsyncCache { Görev Başlatma (Sözlük parameters); Görev Sekmesi (dize anahtarı, T değeri, TimeSpan lifeSpan); Görev Get (dize anahtarı); Görev Kaldır (dize tuşu); } ' –