2011-03-07 56 views
2

沒有人有任何想法是什麼實現鎖定的最佳方式,以便X秒後它會自動釋放?C#在超時後自動釋放鎖定

+3

這聽起來像一個壞主意。你想做什麼? – SLaks 2011-03-07 17:06:06

+0

我同意SLaks - 它的「不尋常」等待X秒鎖定。 – Stuart 2011-03-07 17:09:48

+0

理想情況下,我需要將一個泛型類放在一起,它將引發異常或在超時後自動清除鎖,即使用鎖定類的方法出現問題 – Johnv2020 2011-03-07 17:12:19

回答

0

在網頁開發中,我總是以滑動超時的方式緩存。也許你可以使用一個緩存的對象作爲鎖?

這裏的緩存技術在非Web應用程序的討論:

Caching in C# without System.Web

2

您可以使用Monitor.TryEnter來實現此目的。請參閱下面 -

Synchronization problems with Monitor class in WCF service

if(Monitor.TryEnter(lockObj, timeout)) { 
    try { 
     ... 
    } finally { 
     Monitor.Exit(lockObj); 
    } 
} 
+3

不知道你完全理解我 - Monitor.TryEnter(據我所知)將接受一個Timespan,之後它將停止嘗試獲取鎖。在我的情況下,我有鎖,並希望它在超時後自動釋放 – Johnv2020 2011-03-07 17:09:08

3

假設你正在尋找一個事件,在X秒開火,那麼我不認爲有其目前提供的功能,你正在尋找的類型的任何核心互斥對象對於。

您可以通過使用System.Timer(在X秒內釋放並釋放鎖定的互斥體)或使用睡眠時間爲X秒的線程創建此類功能 - 我寧願使用第一種方法。

但是,這些都將安排在用戶/應用程序層 - 所以你將不得不等待他們安排。