2012-07-14 20 views

回答

1

如果我正確理解你的問題,你想要一個使用ConcurrencyMode = ConcurrencyMode.Multiple的服務,但你也想要一個單線程的方法。

只需要使用此服務方法

private object getIdLock = new object(); 
public int GetId() 
{ 
    lock(getIdLock) 
    { 
     // do your stuff in here 
    } 
} 
+0

但什麼heppends到aother客戶端不能獲得該鎖鎖定?他們是否等到第一個完成? – 2012-07-14 16:17:20

+0

甚至在方法上放上['[MethodImpl(MethodImplOptions.Synchronized)]'](http://stackoverflow.com/questions/2223656/what-does-methodimploptions-synchronized-do),那麼你永遠不會意外地出去鎖。 – Jeroen 2012-07-14 16:17:49

+2

[MethodImpl(MethodImplOptions.Synchronized)]是不好的做法,應該避免,因爲如果有人鎖定服務對象,它很容易導致死鎖。這個屬性本質上是整個方法的一個鎖(this)。請參閱MSDN文檔頁面上的註釋:http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.methodimploptions.aspx – 2012-07-14 16:30:44

相關問題