Existe-t-il un moyen dans asp.net de s'assurer qu'un certain sous-thread n'est pas exécuté deux fois simultanément, quoi qu'il arrive?asp.net global synclock object
le code que j'ai maintenant
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
si je lance ce code sur chaque page puis à plusieurs reprises le code chevauche. la fonction DoTrace dans le code écrit simplement le message dans une table.
les messages de la table devraient apparaître dans l'ordre (entré, sortant, quitté) encore et encore, mais en réalité, ils ne le font pas. Je suis comme entré, sortant, entré, sorti, sortant ...
cela signifie que la synchronisation n'est pas terminée. Est-ce vrai? Si oui, comment peut-on implémenter une synclock complète sur un bloc de code, entre requêtes et entre sessions?
EDIT: J'ai besoin de ce verrou, car le code réel enverra des emails, selon une liste de types de mailing dans un db. après chaque type de mailing est envoyé, son marqué, puis il continue avec le mailing suivant. Je ne peux pas avoir au milieu du traitement, un autre thread devrait voir ce mailing comme non traité.
s'il vous plaît conseiller
salut merci. oui j'essayé. S'il vous plaît voir http: // stackoverflow.com/questions/4851591/asp-net-multithreading-avec-synclock. aussi ive édité ma question pour inclure le raisonnement. Merci. –
Les variables statiques sont partagées sur l'ensemble de l'AppDomain, ce qui est identique à l'ensemble de l'application. –
Je m'attendrais à ce que votre code imprime Entrée et sortie l'un après l'autre, mais en raison de la façon dont le SyncLock fonctionne, il y a une chance qu'il imprime le suivant Entré avant la sortie finale –