我不得不將數據集存儲在緩存中,以便X min,並且當它到期時,我擁有它,以便下一個請求將檢查緩存是否存在,然後進入並提取更新數據並設置緩存。問題在於另一個用戶此時會進來並嘗試訪問該對象並導致異常被拋出。我如何防止這種情況發生?C#問題,試圖訪問緩存對象的多個用戶
回答
您可以使用C#中的鎖定語句來執行此操作。
您需要一個用作「鎖定」的對象變量,因此一次只能有一個線程訪問它。
鎖定更新或檢索緩存對象的代碼。
下面是一個簡單的類演示此:
public class UpdateCache
{
private static object _myLockObject;
public static void UpdateCache()
{
lock(_myLockObject)
{
.. Update cache object
}
}
public static void LoadFromCache(string key)
{
lock(_myLockObject)
{
.. retrieve data from cache
}
}
}
一種典型的花紋是封裝緩存的對象中的屬性。屬性getter可以控制對緩存對象的所有訪問。
private static object _locker = new object();
public static DataSet CachedDataSet
{
get
{
if (Cache["DataSetKey"] == null)
{
lock (_locker)
{
if (Cache["DataSetKey"] == null)
{
Cache["DataSetKey"] = CreateAndFillDataSet();
}
}
}
return (DataSet) Cache["DataSetKey"];
}
}
這段代碼不會編譯,getter沒有任何回報。 – 2009-10-01 03:33:43
downvote(不是我的)雖然有點苛刻,顯然有點過分 – 2009-10-01 03:34:35
等待私人對象不應該是靜態的嗎? – BlackTea 2009-10-01 03:37:06
- 1. Symfony2訪問多個用戶的多個對象的ACL訪問
- 2. 從多個ORM訪問一個數據庫::緩存問題
- 3. 訪問緩存從緩存中緩存對象
- 4. c3p0緩存對象的性能問題:
- 5. C#將鎖對象傳遞到通用緩存訪問方法
- 6. 問題訪問JSON對象?
- 7. PHP對象訪問問題
- 8. 訪問類對象問題
- 9. 緩存泡沫對象。 Unicode問題
- 10. 預緩存站點的用戶訪問
- 11. 訪問對象C++
- 12. Doctrine2多對多訪存行問題
- 13. C++對象引用/訪問
- 14. 從多個客戶端訪問應用結構緩存
- 15. 客戶端緩存問題?
- 16. 訪問正在更新的緩存對象中的數據的問題
- 17. 訪問緩存圖片phonegap
- 18. 緩存訪問
- 19. Spring Security - 訪問用戶緩存
- 20. 問題訪問C++與C++客戶
- 21. C#,對象問題
- 22. 試圖訪問被銷燬對象
- 23. 從另一個用戶控件c訪問userControl上的對象#
- 24. Django1.3多個gunicorn工作緩存問題
- 25. 多線程訪問多個對象
- 26. 圖像緩存問題
- 27. Google地圖,緩存問題
- 28. laravel 5.3中的對象訪問問題?
- 29. 訪問JSON對象的問題
- 30. 訪問php對象的多個屬性
請張貼破解的代碼。 – 2009-10-01 03:20:14