在asp.net中有沒有一種方法可以確保某個線程的子程序不會同時運行兩次,不管是什麼?asp.net global synclock object
代碼我現在已經是
Public Class CheckClass
ReadOnly Property CheckSessionsLock As Object
Get
If HttpRuntime.Cache("CheckSessionsLock") Is Nothing Then HttpRuntime.Cache("CheckSessionsLock") = New Object
Return HttpRuntime.Cache("CheckSessionsLock")
End Get
End Property
Sub TryThreads()
Dim thread = New Thread(AddressOf TryLock)
thread.Priority = ThreadPriority.Lowest
thread.Start()
End Sub
Sub TryLock()
SyncLock CheckSessionsLock
DoTrace("entered locker")
For x = 0 To 10000
Next
DoTrace("exiting locker")
End SyncLock
DoTrace("exited locker")
End Sub
End Class
,如果我在每一頁上運行該代碼,然後幾次代碼重疊。代碼中的DoTrace函數只是將消息寫入表中。
表中的消息應該一次又一次地按順序出現(進入,退出,退出),但實際上它們不會。我得到像進入,退出,進入,退出,退出...
這意味着,synclock是不完整的。真的嗎?
如果是這樣,我們如何在代碼塊,跨請求和跨會話實現一個完整的synclock?
編輯:我需要這個鎖,因爲真正的代碼將發送電子郵件,根據數據庫中的郵件類型列表。在發送每種郵寄類型之後,將其標記,然後繼續進行下一次郵寄。我不能在處理中,另一個線程應該看到這封郵件爲未處理。
請指教
你好謝謝。是的,我試過了。請參閱http:// stackoverflow。COM /問題/ 4851591/ASP淨多線程與 - 的SyncLock。還編輯了我的問題以包含推理。謝謝。 – 2011-02-07 14:39:30