asp.netに、特定のスレッド化されたサブが何があっても同時に2回実行されないようにする方法はありますか?
私が今持っているコードは
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関数は、メッセージをテーブルに書き込むだけです。
表内のメッセージは、順番に(入力、終了、終了)何度も表示されるはずですが、実際には表示されません。私は入った、出た、入った、出た、出たようになります...
これは、同期ロックが完了していないことを意味します。本当?
もしそうなら、リクエスト間およびセッション間で、コードのブロックに完全な同期ロックを実装するにはどうすればよいですか?
編集:データベース内のメールタイプのリストによると、実際のコードは電子メールを送信するため、このロックが必要です。各メーリングタイプが送信された後、マークが付けられ、次のメーリングに進みます。処理の途中ではできません。別のスレッドがこのメールを未処理と見なす必要があります。
お知らせ下さい