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 函数只是将消息写入表中。
表格中的消息应该按顺序(进入、退出、退出)一次又一次地出现,但实际上并非如此。我就像进入,退出,进入,退出,退出......
这意味着同步锁未完成。真的吗?
如果是这样,我们如何跨请求和跨会话在代码块上实现完整的同步锁?
编辑:我需要这个锁,因为真正的代码将根据数据库中的邮件类型列表发送电子邮件。在发送每种邮寄类型后,对其进行标记,然后继续进行下一次邮寄。我不能在处理过程中,另一个线程应该将此邮件视为未处理。
请指教