есть ли способ в asp.net убедиться, что определенный многопоточный саб не запускается дважды одновременно, несмотря ни на что?
код, который у меня сейчас есть,
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 в коде просто записывает сообщение в таблицу.
сообщения в таблице должны появляться снова и снова по порядку (входить, выходить, выходить), но на самом деле это не так. я как вошел, выходя, вошел, вышел, выход ...
это означает, что синхронизация не завершена. это правда?
если так, как мы можем реализовать полную синхронизацию для блока кода, между запросами и между сеансами?
РЕДАКТИРОВАТЬ: мне нужна эта блокировка, так как реальный код будет отправлять электронные письма, согласно списку типов рассылки в БД. после того, как каждый тип почтового сообщения отправлен, он помечается, а затем продолжается со следующего почтового сообщения. я не могу иметь в середине обработки, другой поток должен видеть эту рассылку как необработанную.
пожалуйста, сообщите