Monitor.Wait Method

Definition

Libère le verrou d’un objet et bloque le thread actuel jusqu’à ce qu’il acquière à nouveau le verrou.Releases the lock on an object and blocks the current thread until it reacquires the lock.

Overloads

Wait(Object, Int32, Boolean)

Libère le verrou d’un objet et bloque le thread actuel jusqu’à ce qu’il acquière à nouveau le verrou.Releases the lock on an object and blocks the current thread until it reacquires the lock. Si le délai d'attente spécifié est écoulé, le thread intègre la file d'attente opérationnelle.If the specified time-out interval elapses, the thread enters the ready queue. Cette méthode spécifie également si le domaine de synchronisation associé au contexte (dans le cas d’un contexte synchronisé) est abandonné avant l’attente et acquis à nouveau par la suite.This method also specifies whether the synchronization domain for the context (if in a synchronized context) is exited before the wait and reacquired afterward.

Wait(Object)

Libère le verrou d’un objet et bloque le thread actuel jusqu’à ce qu’il acquière à nouveau le verrou.Releases the lock on an object and blocks the current thread until it reacquires the lock.

Wait(Object, Int32)

Libère le verrou d’un objet et bloque le thread actuel jusqu’à ce qu’il acquière à nouveau le verrou.Releases the lock on an object and blocks the current thread until it reacquires the lock. Si le délai d'attente spécifié est écoulé, le thread intègre la file d'attente opérationnelle.If the specified time-out interval elapses, the thread enters the ready queue.

Wait(Object, TimeSpan)

Libère le verrou d’un objet et bloque le thread actuel jusqu’à ce qu’il acquière à nouveau le verrou.Releases the lock on an object and blocks the current thread until it reacquires the lock. Si le délai d'attente spécifié est écoulé, le thread intègre la file d'attente opérationnelle.If the specified time-out interval elapses, the thread enters the ready queue.

Wait(Object, TimeSpan, Boolean)

Libère le verrou d’un objet et bloque le thread actuel jusqu’à ce qu’il acquière à nouveau le verrou.Releases the lock on an object and blocks the current thread until it reacquires the lock. Si le délai d'attente spécifié est écoulé, le thread intègre la file d'attente opérationnelle.If the specified time-out interval elapses, the thread enters the ready queue. Le domaine de synchronisation associé au contexte synchronisé peut être abandonné avant l’attente et acquis de nouveau par la suite.Optionally exits the synchronization domain for the synchronized context before the wait and reacquires the domain afterward.

Wait(Object, Int32, Boolean)

Libère le verrou d’un objet et bloque le thread actuel jusqu’à ce qu’il acquière à nouveau le verrou.Releases the lock on an object and blocks the current thread until it reacquires the lock. Si le délai d'attente spécifié est écoulé, le thread intègre la file d'attente opérationnelle.If the specified time-out interval elapses, the thread enters the ready queue. Cette méthode spécifie également si le domaine de synchronisation associé au contexte (dans le cas d’un contexte synchronisé) est abandonné avant l’attente et acquis à nouveau par la suite.This method also specifies whether the synchronization domain for the context (if in a synchronized context) is exited before the wait and reacquired afterward.

public:
 static bool Wait(System::Object ^ obj, int millisecondsTimeout, bool exitContext);
public static bool Wait (object obj, int millisecondsTimeout, bool exitContext);
static member Wait : obj * int * bool -> bool
Public Shared Function Wait (obj As Object, millisecondsTimeout As Integer, exitContext As Boolean) As Boolean

Parameters

obj
Object

Objet sur lequel attendre.The object on which to wait.

millisecondsTimeout
Int32

Nombre de millisecondes à attendre avant que le thread intègre la file d'attente opérationnelle.The number of milliseconds to wait before the thread enters the ready queue.

exitContext
Boolean

true pour abandonner et acquérir à nouveau le domaine de synchronisation associé au contexte (dans le cas d'un contexte synchronisé) avant l'attente ; sinon, false.true to exit and reacquire the synchronization domain for the context (if in a synchronized context) before the wait; otherwise, false.

Returns

Boolean

true si le verrou a fait l'objet d'une nouvelle acquisition avant l'expiration du délai spécifié ; false si le verrou a fait l'objet d'une nouvelle acquisition après l'expiration du délai spécifié.true if the lock was reacquired before the specified time elapsed; false if the lock was reacquired after the specified time elapsed. La méthode ne retourne pas de valeur tant que le verrou n'est pas acquis à nouveau.The method does not return until the lock is reacquired.

Exceptions

Le paramètre obj a la valeur null.The obj parameter is null.

Wait n’est pas appelé à partir d’un bloc de code synchronisé.Wait is not invoked from within a synchronized block of code.

Le thread qui appelle Wait quitte ensuite l'état d'attente.The thread that invokes Wait is later interrupted from the waiting state. Cela se produit lorsqu’un autre thread appelle la méthode Interrupt() de ce thread.This happens when another thread calls this thread's Interrupt() method.

La valeur du paramètre millisecondsTimeout est négative et différente de Infinite.The value of the millisecondsTimeout parameter is negative, and is not equal to Infinite.

Remarks

Cette méthode ne retourne pas tant qu’elle n’a pas réacquis un verrou exclusif sur le paramètre obj.This method does not return until it reacquires an exclusive lock on the obj parameter.

Le thread qui possède actuellement le verrou sur l’objet spécifié appelle cette méthode pour libérer l’objet afin qu’un autre thread puisse y accéder.The thread that currently owns the lock on the specified object invokes this method in order to release the object so that another thread can access it. L’appelant est bloqué en attendant de réacquérir le verrou.The caller is blocked while waiting to reacquire the lock. Cette méthode est appelée lorsque l’appelant doit attendre une modification d’État qui se produira à la suite des opérations d’un autre thread.This method is called when the caller needs to wait for a state change that will occur as a result of another thread's operations.

Le délai d’attente garantit que le thread actuel ne se bloque pas indéfiniment si un autre thread libère le verrou sans appeler d’abord la méthode Pulse ou PulseAll.The time-out ensures that the current thread does not block indefinitely if another thread releases the lock without first calling the Pulse or PulseAll method. Il déplace également le thread vers la file d’attente opérationnelle, en ignorant les autres threads qu’il contient dans la file d’attente, afin qu’il puisse réacquérir le verrou plus tôt.It also moves the thread to the ready queue, bypassing other threads ahead of it in the wait queue, so that it can reacquire the lock sooner. Le thread peut tester la valeur de retour de la méthode Wait pour déterminer s’il a réacquis le verrou avant le délai d’attente. Le thread peut évaluer les conditions qui ont provoqué l’entrée dans l’attente et, si nécessaire, appeler à nouveau la méthode Wait.The thread can test the return value of the Wait method to determine whether it reacquired the lock prior to the time-out. The thread can evaluate the conditions that caused it to enter the wait, and if necessary call the Wait method again.

Lorsqu’un thread appelle Wait, il libère le verrou et entre dans la file d’attente en attente.When a thread calls Wait, it releases the lock and enters the waiting queue. À ce stade, le thread suivant dans la file d’attente opérationnelle (le cas échéant) est autorisé à prendre le contrôle du verrou.At this point, the next thread in the ready queue (if there is one) is allowed to take control of the lock. Le thread qui a appelé Wait reste dans la file d’attente en attente jusqu’à ce qu’un thread qui détient le verrou appelle PulseAllou qu’il soit le suivant dans la file d’attente et qu’un thread qui détient le verrou appelle Pulse.The thread that invoked Wait remains in the waiting queue until either a thread that holds the lock invokes PulseAll, or it is the next in the queue and a thread that holds the lock invokes Pulse. Toutefois, si millisecondsTimeout s’écoule avant qu’un autre thread appelle la méthode Pulse ou PulseAll de cet objet, le thread d’origine est déplacé vers la file d’attente opérationnelle afin de récupérer le verrou.However, if millisecondsTimeout elapses before another thread invokes this object's Pulse or PulseAll method, the original thread is moved to the ready queue in order to regain the lock.

Note

Si Infinite est spécifié pour le paramètre millisecondsTimeout, cette méthode se bloque indéfiniment, sauf si le détenteur du verrou appelle Pulse ou PulseAll.If Infinite is specified for the millisecondsTimeout parameter, this method blocks indefinitely unless the holder of the lock calls Pulse or PulseAll. Si millisecondsTimeout est égal à 0, le thread qui appelle Wait libère le verrou, puis entre immédiatement dans la file d’attente opérationnelle pour récupérer le verrou.If millisecondsTimeout equals 0, the thread that calls Wait releases the lock and then immediately enters the ready queue in order to regain the lock.

L’appelant s’exécute Wait une fois, quel que soit le nombre de fois où Enter a été appelé pour l’objet spécifié.The caller executes Wait once, regardless of the number of times Enter has been invoked for the specified object. Conceptuellement, la méthode Wait stocke le nombre de fois que l’appelant a appelé Enter sur l’objet et appelle Exit autant de fois que nécessaire pour libérer complètement l’objet verrouillé.Conceptually, the Wait method stores the number of times the caller invoked Enter on the object and invokes Exit as many times as necessary to fully release the locked object. L’appelant se bloque ensuite pendant qu’il attend de réacquérir l’objet.The caller then blocks while waiting to reacquire the object. Lorsque l’appelant réacquière le verrou, le système appelle Enter autant de fois que nécessaire pour restaurer le nombre de Enter enregistrés pour l’appelant.When the caller reacquires the lock, the system calls Enter as many times as necessary to restore the saved Enter count for the caller. L’appel de Wait libère le verrou pour l’objet spécifié uniquement ; Si l’appelant est le propriétaire de verrous sur d’autres objets, ces verrous ne sont pas libérés.Calling Wait releases the lock for the specified object only; if the caller is the owner of locks on other objects, these locks are not released.

Note

Un objet synchronisé contient plusieurs références, y compris une référence au thread qui détient actuellement le verrou, une référence à la file d’attente opérationnelle, qui contient les threads prêts à obtenir le verrou, et une référence à la file d’attente en attente, qui contient les threads en attente de notification d’une modification de l’état de l’objet.A synchronized object holds several references, including a reference to the thread that currently holds the lock, a reference to the ready queue, which contains the threads that are ready to obtain the lock, and a reference to the waiting queue, which contains the threads that are waiting for notification of a change in the object's state.

Les méthodes Pulse, PulseAllet Wait doivent être appelées à partir d’un bloc de code synchronisé.The Pulse, PulseAll, and Wait methods must be invoked from within a synchronized block of code.

Les remarques relatives à la méthode Pulse expliquent ce qui se produit si Pulse est appelé quand aucun thread n’attend.The remarks for the Pulse method explain what happens if Pulse is called when no threads are waiting.

Remarques sur la sortie du contexteNotes on Exiting the Context

Le paramètreexitContext n’a aucun effet, à moins que la méthode Wait soit appelée à partir d’un contexte managé non défini par défaut.TheexitContext parameter has no effect unless the Wait method is called from inside a nondefault managed context. Cela peut se produire si votre thread est à l’intérieur d’un appel à une instance d’une classe dérivée de ContextBoundObject.This can happen if your thread is inside a call to an instance of a class derived from ContextBoundObject. Même si vous exécutez actuellement une méthode sur une classe qui n’est pas dérivée de ContextBoundObject, comme String, vous pouvez être dans un contexte non défini par défaut si un ContextBoundObject se trouve sur votre pile dans le domaine d’application actuel.Even if you are currently executing a method on a class that is not derived from ContextBoundObject, like String, you can be in a nondefault context if a ContextBoundObject is on your stack in the current application domain.

Lorsque votre code s’exécute dans un contexte non défini par défaut, la spécification de true pour exitContext amène le thread à quitter le contexte managé non défini par défaut (c’est-à-dire à passer au contexte par défaut) avant d’exécuter la méthode Wait.When your code is executing in a nondefault context, specifying true for exitContext causes the thread to exit the nondefault managed context (that is, to transition to the default context) before executing the Wait method. Elle retourne au contexte par défaut d’origine après l’appel à la méthode Wait.It returns to the original nondefault context after the call to the Wait method completes.

Cela peut être utile lorsque l’attribut SynchronizationAttribute est appliqué à la classe liée au contexte.This can be useful when the context-bound class has the SynchronizationAttribute attribute applied. Dans ce cas, tous les appels aux membres de la classe sont automatiquement synchronisés et le domaine de synchronisation est le corps entier du code pour la classe.In that case, all calls to members of the class are automatically synchronized, and the synchronization domain is the entire body of code for the class. Si le code de la pile des appels d’un membre appelle la méthode Wait et spécifie true pour exitContext, le thread quitte le domaine de synchronisation, ce qui permet à un thread qui est bloqué sur un appel à n’importe quel membre de l’objet de continuer.If code in the call stack of a member calls the Wait method and specifies true for exitContext, the thread exits the synchronization domain, allowing a thread that is blocked on a call to any member of the object to proceed. Quand la méthode Wait retourne, le thread qui a effectué l’appel doit attendre pour entrer de nouveau dans le domaine de synchronisation.When the Wait method returns, the thread that made the call must wait to reenter the synchronization domain.

See also

Wait(Object)

Libère le verrou d’un objet et bloque le thread actuel jusqu’à ce qu’il acquière à nouveau le verrou.Releases the lock on an object and blocks the current thread until it reacquires the lock.

public:
 static bool Wait(System::Object ^ obj);
public static bool Wait (object obj);
static member Wait : obj -> bool
Public Shared Function Wait (obj As Object) As Boolean

Parameters

obj
Object

Objet sur lequel attendre.The object on which to wait.

Returns

Boolean

true si l'appel est retourné parce que l'appelant a de nouveau acquis le verrou pour l'objet spécifié.true if the call returned because the caller reacquired the lock for the specified object. Cette méthode ne retourne rien si le verrou n'est pas acquis à nouveau.This method does not return if the lock is not reacquired.

Exceptions

Le paramètre obj a la valeur null.The obj parameter is null.

Le thread appelant ne possède pas le verrou pour l'objet spécifié.The calling thread does not own the lock for the specified object.

Le thread qui appelle Wait quitte ensuite l'état d'attente.The thread that invokes Wait is later interrupted from the waiting state. Cela se produit lorsqu’un autre thread appelle la méthode Interrupt() de ce thread.This happens when another thread calls this thread's Interrupt() method.

Remarks

Le thread qui possède actuellement le verrou sur l’objet spécifié appelle cette méthode pour libérer l’objet afin qu’un autre thread puisse y accéder.The thread that currently owns the lock on the specified object invokes this method in order to release the object so that another thread can access it. L’appelant est bloqué en attendant de réacquérir le verrou.The caller is blocked while waiting to reacquire the lock. Cette méthode est appelée lorsque l’appelant doit attendre une modification d’État qui se produira à la suite des opérations d’un autre thread.This method is called when the caller needs to wait for a state change that will occur as a result of another thread's operations.

Lorsqu’un thread appelle Wait, il libère le verrou sur l’objet et entre dans la file d’attente de l’objet.When a thread calls Wait, it releases the lock on the object and enters the object's waiting queue. Le thread suivant dans la file d’attente opérationnelle de l’objet (le cas échéant) acquiert le verrou et utilise l’objet de façon exclusive.The next thread in the object's ready queue (if there is one) acquires the lock and has exclusive use of the object. Tous les threads qui appellent Wait restent dans la file d’attente jusqu’à ce qu’ils reçoivent un signal d' Pulse ou PulseAll, envoyés par le propriétaire du verrou.All threads that call Wait remain in the waiting queue until they receive a signal from Pulse or PulseAll, sent by the owner of the lock. Si Pulse est envoyé, seul le thread situé à l’en-tête de la file d’attente en attente est affecté.If Pulse is sent, only the thread at the head of the waiting queue is affected. Si PulseAll est envoyé, tous les threads qui attendent l’objet sont affectés.If PulseAll is sent, all threads that are waiting for the object are affected. Lorsque le signal est reçu, un ou plusieurs threads laissent la file d’attente en attente et entrent dans la file d’attente opérationnelle.When the signal is received, one or more threads leave the waiting queue and enter the ready queue. Un thread de la file d’attente opérationnelle est autorisé à réacquérir le verrou.A thread in the ready queue is permitted to reacquire the lock.

Cette méthode retourne lorsque le thread appelant réacquière le verrou sur l’objet.This method returns when the calling thread reacquires the lock on the object. Notez que cette méthode bloque indéfiniment si le détenteur du verrou n’appelle pas Pulse ou PulseAll.Note that this method blocks indefinitely if the holder of the lock does not call Pulse or PulseAll.

L’appelant s’exécute Wait une fois, quel que soit le nombre de fois où Enter a été appelé pour l’objet spécifié.The caller executes Wait once, regardless of the number of times Enter has been invoked for the specified object. Conceptuellement, la méthode Wait stocke le nombre de fois que l’appelant a appelé Enter sur l’objet et appelle Exit autant de fois que nécessaire pour libérer complètement l’objet verrouillé.Conceptually, the Wait method stores the number of times the caller invoked Enter on the object and invokes Exit as many times as necessary to fully release the locked object. L’appelant se bloque ensuite pendant qu’il attend de réacquérir l’objet.The caller then blocks while waiting to reacquire the object. Lorsque l’appelant réacquière le verrou, le système appelle Enter autant de fois que nécessaire pour restaurer le nombre de Enter enregistrés pour l’appelant.When the caller reacquires the lock, the system calls Enter as many times as necessary to restore the saved Enter count for the caller. L’appel de Wait libère le verrou pour l’objet spécifié uniquement ; Si l’appelant est le propriétaire de verrous sur d’autres objets, ces verrous ne sont pas libérés.Calling Wait releases the lock for the specified object only; if the caller is the owner of locks on other objects, these locks are not released.

Notez qu’un objet synchronisé contient plusieurs références, y compris une référence au thread qui détient actuellement le verrou, une référence à la file d’attente opérationnelle, qui contient les threads prêts à obtenir le verrou, et une référence à la file d’attente en attente, qui contient les threads en attente de notification d’une modification de l’état de l’objet.Note that a synchronized object holds several references, including a reference to the thread that currently holds the lock, a reference to the ready queue, which contains the threads that are ready to obtain the lock, and a reference to the waiting queue, which contains the threads that are waiting for notification of a change in the object's state.

Les méthodes Pulse, PulseAllet Wait doivent être appelées à partir d’un bloc de code synchronisé.The Pulse, PulseAll, and Wait methods must be invoked from within a synchronized block of code.

Les remarques relatives à la méthode Pulse expliquent ce qui se produit si Pulse est appelé quand aucun thread n’attend.The remarks for the Pulse method explain what happens if Pulse is called when no threads are waiting.

See also

Wait(Object, Int32)

Libère le verrou d’un objet et bloque le thread actuel jusqu’à ce qu’il acquière à nouveau le verrou.Releases the lock on an object and blocks the current thread until it reacquires the lock. Si le délai d'attente spécifié est écoulé, le thread intègre la file d'attente opérationnelle.If the specified time-out interval elapses, the thread enters the ready queue.

public:
 static bool Wait(System::Object ^ obj, int millisecondsTimeout);
public static bool Wait (object obj, int millisecondsTimeout);
static member Wait : obj * int -> bool
Public Shared Function Wait (obj As Object, millisecondsTimeout As Integer) As Boolean

Parameters

obj
Object

Objet sur lequel attendre.The object on which to wait.

millisecondsTimeout
Int32

Nombre de millisecondes à attendre avant que le thread intègre la file d'attente opérationnelle.The number of milliseconds to wait before the thread enters the ready queue.

Returns

Boolean

true si le verrou a fait l'objet d'une nouvelle acquisition avant l'expiration du délai spécifié ; false si le verrou a fait l'objet d'une nouvelle acquisition après l'expiration du délai spécifié.true if the lock was reacquired before the specified time elapsed; false if the lock was reacquired after the specified time elapsed. La méthode ne retourne pas de valeur tant que le verrou n'est pas acquis à nouveau.The method does not return until the lock is reacquired.

Exceptions

Le paramètre obj a la valeur null.The obj parameter is null.

Le thread appelant ne possède pas le verrou pour l'objet spécifié.The calling thread does not own the lock for the specified object.

Le thread qui appelle Wait quitte ensuite l'état d'attente.The thread that invokes Wait is later interrupted from the waiting state. Cela se produit lorsqu’un autre thread appelle la méthode Interrupt() de ce thread.This happens when another thread calls this thread's Interrupt() method.

La valeur du paramètre millisecondsTimeout est négative et différente de Infinite.The value of the millisecondsTimeout parameter is negative, and is not equal to Infinite.

Remarks

Cette méthode ne retourne pas tant qu’elle n’a pas réacquis un verrou exclusif sur le paramètre obj.This method does not return until it reacquires an exclusive lock on the obj parameter.

Le thread qui possède actuellement le verrou sur l’objet spécifié appelle cette méthode pour libérer l’objet afin qu’un autre thread puisse y accéder.The thread that currently owns the lock on the specified object invokes this method in order to release the object so that another thread can access it. L’appelant est bloqué en attendant de réacquérir le verrou.The caller is blocked while waiting to reacquire the lock. Cette méthode est appelée lorsque l’appelant doit attendre une modification d’État qui se produira à la suite des opérations d’un autre thread.This method is called when the caller needs to wait for a state change that will occur as a result of another thread's operations.

Le délai d’attente garantit que le thread actuel ne se bloque pas indéfiniment si un autre thread libère le verrou sans appeler d’abord la méthode Pulse ou PulseAll.The time-out ensures that the current thread does not block indefinitely if another thread releases the lock without first calling the Pulse or PulseAll method. Il déplace également le thread vers la file d’attente opérationnelle, en ignorant les autres threads qu’il contient dans la file d’attente, afin qu’il puisse réacquérir le verrou plus tôt.It also moves the thread to the ready queue, bypassing other threads ahead of it in the wait queue, so that it can reacquire the lock sooner. Le thread peut tester la valeur de retour de la méthode Wait pour déterminer s’il a réacquis le verrou avant le délai d’attente. Le thread peut évaluer les conditions qui ont provoqué l’entrée dans l’attente et, si nécessaire, appeler à nouveau la méthode Wait.The thread can test the return value of the Wait method to determine whether it reacquired the lock prior to the time-out. The thread can evaluate the conditions that caused it to enter the wait, and if necessary call the Wait method again.

Lorsqu’un thread appelle Wait, il libère le verrou sur l’objet et entre dans la file d’attente de l’objet.When a thread calls Wait, it releases the lock on the object and enters the object's waiting queue. Le thread suivant dans la file d’attente opérationnelle de l’objet (le cas échéant) acquiert le verrou et utilise l’objet de façon exclusive.The next thread in the object's ready queue (if there is one) acquires the lock and has exclusive use of the object. Le thread qui a appelé Wait reste dans la file d’attente en attente jusqu’à ce qu’un thread qui détient le verrou appelle PulseAllou qu’il soit le suivant dans la file d’attente et qu’un thread qui détient le verrou appelle Pulse.The thread that invoked Wait remains in the waiting queue until either a thread that holds the lock invokes PulseAll, or it is the next in the queue and a thread that holds the lock invokes Pulse. Toutefois, si millisecondsTimeout s’écoule avant qu’un autre thread appelle la méthode Pulse ou PulseAll de cet objet, le thread d’origine est déplacé vers la file d’attente opérationnelle afin de récupérer le verrou.However, if millisecondsTimeout elapses before another thread invokes this object's Pulse or PulseAll method, the original thread is moved to the ready queue in order to regain the lock.

Note

Si Infinite est spécifié pour le paramètre millisecondsTimeout, cette méthode se bloque indéfiniment, sauf si le détenteur du verrou appelle Pulse ou PulseAll.If Infinite is specified for the millisecondsTimeout parameter, this method blocks indefinitely unless the holder of the lock calls Pulse or PulseAll. Si millisecondsTimeout est égal à 0, le thread qui appelle Wait libère le verrou, puis entre immédiatement dans la file d’attente opérationnelle pour récupérer le verrou.If millisecondsTimeout equals 0, the thread that calls Wait releases the lock and then immediately enters the ready queue in order to regain the lock.

L’appelant s’exécute Wait une fois, quel que soit le nombre de fois où Enter a été appelé pour l’objet spécifié.The caller executes Wait once, regardless of the number of times Enter has been invoked for the specified object. Conceptuellement, la méthode Wait stocke le nombre de fois que l’appelant a appelé Enter sur l’objet et appelle Exit autant de fois que nécessaire pour libérer complètement l’objet verrouillé.Conceptually, the Wait method stores the number of times the caller invoked Enter on the object and invokes Exit as many times as necessary to fully release the locked object. L’appelant se bloque ensuite pendant qu’il attend de réacquérir l’objet.The caller then blocks while waiting to reacquire the object. Lorsque l’appelant réacquière le verrou, le système appelle Enter autant de fois que nécessaire pour restaurer le nombre de Enter enregistrés pour l’appelant.When the caller reacquires the lock, the system calls Enter as many times as necessary to restore the saved Enter count for the caller. L’appel de Wait libère le verrou pour l’objet spécifié uniquement ; Si l’appelant est le propriétaire de verrous sur d’autres objets, ces verrous ne sont pas libérés.Calling Wait releases the lock for the specified object only; if the caller is the owner of locks on other objects, these locks are not released.

Note

Un objet synchronisé contient plusieurs références, y compris une référence au thread qui détient actuellement le verrou, une référence à la file d’attente opérationnelle, qui contient les threads prêts à obtenir le verrou, et une référence à la file d’attente en attente, qui contient les threads en attente de notification d’une modification de l’état de l’objet.A synchronized object holds several references, including a reference to the thread that currently holds the lock, a reference to the ready queue, which contains the threads that are ready to obtain the lock, and a reference to the waiting queue, which contains the threads that are waiting for notification of a change in the object's state.

Les méthodes Pulse, PulseAllet Wait doivent être appelées à partir d’un bloc de code synchronisé.The Pulse, PulseAll, and Wait methods must be invoked from within a synchronized block of code.

Les remarques relatives à la méthode Pulse expliquent ce qui se produit si Pulse est appelé quand aucun thread n’attend.The remarks for the Pulse method explain what happens if Pulse is called when no threads are waiting.

See also

Wait(Object, TimeSpan)

Libère le verrou d’un objet et bloque le thread actuel jusqu’à ce qu’il acquière à nouveau le verrou.Releases the lock on an object and blocks the current thread until it reacquires the lock. Si le délai d'attente spécifié est écoulé, le thread intègre la file d'attente opérationnelle.If the specified time-out interval elapses, the thread enters the ready queue.

public:
 static bool Wait(System::Object ^ obj, TimeSpan timeout);
public static bool Wait (object obj, TimeSpan timeout);
static member Wait : obj * TimeSpan -> bool
Public Shared Function Wait (obj As Object, timeout As TimeSpan) As Boolean

Parameters

obj
Object

Objet sur lequel attendre.The object on which to wait.

timeout
TimeSpan

TimeSpan qui représente le temps à attendre avant que le thread n'intègre la file d'attente opérationnelle.A TimeSpan representing the amount of time to wait before the thread enters the ready queue.

Returns

Boolean

true si le verrou a fait l'objet d'une nouvelle acquisition avant l'expiration du délai spécifié ; false si le verrou a fait l'objet d'une nouvelle acquisition après l'expiration du délai spécifié.true if the lock was reacquired before the specified time elapsed; false if the lock was reacquired after the specified time elapsed. La méthode ne retourne pas de valeur tant que le verrou n'est pas acquis à nouveau.The method does not return until the lock is reacquired.

Exceptions

Le paramètre obj a la valeur null.The obj parameter is null.

Le thread appelant ne possède pas le verrou pour l'objet spécifié.The calling thread does not own the lock for the specified object.

Le thread qui appelle Wait quitte ensuite l'état d'attente.The thread that invokes Wait is later interrupted from the waiting state. Cela se produit lorsqu’un autre thread appelle la méthode Interrupt() de ce thread.This happens when another thread calls this thread's Interrupt() method.

La valeur en millisecondes du paramètre timeout est négative et ne représente pas Infinite (-1 milliseconde) ou est supérieure à MaxValue.The value of the timeout parameter in milliseconds is negative and does not represent Infinite (-1 millisecond), or is greater than MaxValue.

Remarks

Cette méthode ne retourne pas tant qu’elle n’a pas réacquis un verrou exclusif sur le paramètre obj.This method does not return until it reacquires an exclusive lock on the obj parameter.

Le thread qui possède actuellement le verrou sur l’objet spécifié appelle cette méthode pour libérer l’objet afin qu’un autre thread puisse y accéder.The thread that currently owns the lock on the specified object invokes this method in order to release the object so that another thread can access it. L’appelant est bloqué en attendant de réacquérir le verrou.The caller is blocked while waiting to reacquire the lock. Cette méthode est appelée lorsque l’appelant doit attendre une modification d’État qui se produira à la suite des opérations d’un autre thread.This method is called when the caller needs to wait for a state change that will occur as a result of another thread's operations.

Le délai d’attente garantit que le thread actuel ne se bloque pas indéfiniment si un autre thread libère le verrou sans appeler d’abord la méthode Pulse ou PulseAll.The time-out ensures that the current thread does not block indefinitely if another thread releases the lock without first calling the Pulse or PulseAll method. Il déplace également le thread vers la file d’attente opérationnelle, en ignorant les autres threads qu’il contient dans la file d’attente, afin qu’il puisse réacquérir le verrou plus tôt.It also moves the thread to the ready queue, bypassing other threads ahead of it in the wait queue, so that it can reacquire the lock sooner. Le thread peut tester la valeur de retour de la méthode Wait pour déterminer s’il a réacquis le verrou avant le délai d’attente. Le thread peut évaluer les conditions qui ont provoqué l’entrée dans l’attente et, si nécessaire, appeler à nouveau la méthode Wait.The thread can test the return value of the Wait method to determine whether it reacquired the lock prior to the time-out. The thread can evaluate the conditions that caused it to enter the wait, and if necessary call the Wait method again.

Lorsqu’un thread appelle Wait, il libère le verrou sur l’objet et entre dans la file d’attente de l’objet.When a thread calls Wait, it releases the lock on the object and enters the object's waiting queue. Le thread suivant dans la file d’attente opérationnelle de l’objet (le cas échéant) acquiert le verrou et utilise l’objet de façon exclusive.The next thread in the object's ready queue (if there is one) acquires the lock and has exclusive use of the object. Le thread qui a appelé Wait reste dans la file d’attente en attente jusqu’à ce qu’un thread qui détient le verrou appelle PulseAllou qu’il soit le suivant dans la file d’attente et qu’un thread qui détient le verrou appelle Pulse.The thread that invoked Wait remains in the waiting queue until either a thread that holds the lock invokes PulseAll, or it is the next in the queue and a thread that holds the lock invokes Pulse. Toutefois, si timeout s’écoule avant qu’un autre thread appelle la méthode Pulse ou PulseAll de cet objet, le thread d’origine est déplacé vers la file d’attente opérationnelle afin de récupérer le verrou.However, if timeout elapses before another thread invokes this object's Pulse or PulseAll method, the original thread is moved to the ready queue in order to regain the lock.

Note

Si un TimeSpan représentant-1 milliseconde est spécifié pour le paramètre timeout, cette méthode se bloque indéfiniment, sauf si le détenteur du verrou appelle Pulse ou PulseAll.If a TimeSpan representing -1 millisecond is specified for the timeout parameter, this method blocks indefinitely unless the holder of the lock calls Pulse or PulseAll. Si timeout est égal à 0 milliseconde, le thread qui appelle Wait libère le verrou, puis entre immédiatement dans la file d’attente opérationnelle pour récupérer le verrou.If timeout is 0 milliseconds, the thread that calls Wait releases the lock and then immediately enters the ready queue in order to regain the lock.

L’appelant s’exécute Wait une fois, quel que soit le nombre de fois où Enter a été appelé pour l’objet spécifié.The caller executes Wait once, regardless of the number of times Enter has been invoked for the specified object. Conceptuellement, la méthode Wait stocke le nombre de fois que l’appelant a appelé Enter sur l’objet et appelle Exit autant de fois que nécessaire pour libérer complètement l’objet verrouillé.Conceptually, the Wait method stores the number of times the caller invoked Enter on the object and invokes Exit as many times as necessary to fully release the locked object. L’appelant se bloque ensuite pendant qu’il attend de réacquérir l’objet.The caller then blocks while waiting to reacquire the object. Lorsque l’appelant réacquière le verrou, le système appelle Enter autant de fois que nécessaire pour restaurer le nombre de Enter enregistrés pour l’appelant.When the caller reacquires the lock, the system calls Enter as many times as necessary to restore the saved Enter count for the caller. L’appel de Wait libère le verrou pour l’objet spécifié uniquement ; Si l’appelant est le propriétaire de verrous sur d’autres objets, ces verrous ne sont pas libérés.Calling Wait releases the lock for the specified object only; if the caller is the owner of locks on other objects, these locks are not released.

Note

Un objet synchronisé contient plusieurs références, y compris une référence au thread qui détient actuellement le verrou, une référence à la file d’attente opérationnelle, qui contient les threads prêts à obtenir le verrou, et une référence à la file d’attente en attente, qui contient les threads en attente de notification d’une modification de l’état de l’objet.A synchronized object holds several references, including a reference to the thread that currently holds the lock, a reference to the ready queue, which contains the threads that are ready to obtain the lock, and a reference to the waiting queue, which contains the threads that are waiting for notification of a change in the object's state.

Les méthodes Pulse, PulseAllet Wait doivent être appelées à partir d’un bloc de code synchronisé.The Pulse, PulseAll, and Wait methods must be invoked from within a synchronized block of code.

Les remarques relatives à la méthode Pulse expliquent ce qui se produit si Pulse est appelé quand aucun thread n’attend.The remarks for the Pulse method explain what happens if Pulse is called when no threads are waiting.

See also

Wait(Object, TimeSpan, Boolean)

Libère le verrou d’un objet et bloque le thread actuel jusqu’à ce qu’il acquière à nouveau le verrou.Releases the lock on an object and blocks the current thread until it reacquires the lock. Si le délai d'attente spécifié est écoulé, le thread intègre la file d'attente opérationnelle.If the specified time-out interval elapses, the thread enters the ready queue. Le domaine de synchronisation associé au contexte synchronisé peut être abandonné avant l’attente et acquis de nouveau par la suite.Optionally exits the synchronization domain for the synchronized context before the wait and reacquires the domain afterward.

public:
 static bool Wait(System::Object ^ obj, TimeSpan timeout, bool exitContext);
public static bool Wait (object obj, TimeSpan timeout, bool exitContext);
static member Wait : obj * TimeSpan * bool -> bool
Public Shared Function Wait (obj As Object, timeout As TimeSpan, exitContext As Boolean) As Boolean

Parameters

obj
Object

Objet sur lequel attendre.The object on which to wait.

timeout
TimeSpan

TimeSpan qui représente le temps à attendre avant que le thread n'intègre la file d'attente opérationnelle.A TimeSpan representing the amount of time to wait before the thread enters the ready queue.

exitContext
Boolean

true pour abandonner et acquérir à nouveau le domaine de synchronisation associé au contexte (dans le cas d'un contexte synchronisé) avant l'attente ; sinon, false.true to exit and reacquire the synchronization domain for the context (if in a synchronized context) before the wait; otherwise, false.

Returns

Boolean

true si le verrou a fait l'objet d'une nouvelle acquisition avant l'expiration du délai spécifié ; false si le verrou a fait l'objet d'une nouvelle acquisition après l'expiration du délai spécifié.true if the lock was reacquired before the specified time elapsed; false if the lock was reacquired after the specified time elapsed. La méthode ne retourne pas de valeur tant que le verrou n'est pas acquis à nouveau.The method does not return until the lock is reacquired.

Exceptions

Le paramètre obj a la valeur null.The obj parameter is null.

Wait n’est pas appelé à partir d’un bloc de code synchronisé.Wait is not invoked from within a synchronized block of code.

Le thread qui appelle Wait quitte ensuite l’état d’attente.The thread that invokes Wait is later interrupted from the waiting state. Cela se produit lorsqu’un autre thread appelle la méthode Interrupt() de ce thread.This happens when another thread calls this thread's Interrupt() method.

Le paramètre timeout est négatif et ne représente pas Infinite (-1 milliseconde), ou est supérieur à MaxValue.The timeout parameter is negative and does not represent Infinite (-1 millisecond), or is greater than MaxValue.

Remarks

Cette méthode ne retourne pas tant qu’elle n’a pas réacquis un verrou exclusif sur le paramètre obj.This method does not return until it reacquires an exclusive lock on the obj parameter.

Le thread qui possède actuellement le verrou sur l’objet spécifié appelle cette méthode pour libérer l’objet afin qu’un autre thread puisse y accéder.The thread that currently owns the lock on the specified object invokes this method in order to release the object so that another thread can access it. L’appelant est bloqué en attendant de réacquérir le verrou.The caller is blocked while waiting to reacquire the lock. Cette méthode est appelée lorsque l’appelant doit attendre une modification d’État qui se produira à la suite des opérations d’un autre thread.This method is called when the caller needs to wait for a state change that will occur as a result of another thread's operations.

Le délai d’attente garantit que le thread actuel ne se bloque pas indéfiniment si un autre thread libère le verrou sans appeler d’abord la méthode Pulse ou PulseAll.The time-out ensures that the current thread does not block indefinitely if another thread releases the lock without first calling the Pulse or PulseAll method. Il déplace également le thread vers la file d’attente opérationnelle, en ignorant les autres threads qu’il contient dans la file d’attente, afin qu’il puisse réacquérir le verrou plus tôt.It also moves the thread to the ready queue, bypassing other threads ahead of it in the wait queue, so that it can reacquire the lock sooner. Le thread peut tester la valeur de retour de la méthode Wait pour déterminer s’il a réacquis le verrou avant le délai d’attente. Le thread peut évaluer les conditions qui ont provoqué l’entrée dans l’attente et, si nécessaire, appeler à nouveau la méthode Wait.The thread can test the return value of the Wait method to determine whether it reacquired the lock prior to the time-out. The thread can evaluate the conditions that caused it to enter the wait, and if necessary call the Wait method again.

Lorsqu’un thread appelle Wait, il libère le verrou et entre dans la file d’attente en attente.When a thread calls Wait, it releases the lock and enters the waiting queue. À ce stade, le thread suivant dans la file d’attente opérationnelle (le cas échéant) est autorisé à prendre le contrôle du verrou.At this point, the next thread in the ready queue (if there is one) is allowed to take control of the lock. Le thread qui a appelé Wait reste dans la file d’attente en attente jusqu’à ce qu’un thread qui détient le verrou appelle PulseAllou qu’il soit le suivant dans la file d’attente et qu’un thread qui détient le verrou appelle Pulse.The thread that invoked Wait remains in the waiting queue until either a thread that holds the lock invokes PulseAll, or it is the next in the queue and a thread that holds the lock invokes Pulse. Toutefois, si timeout millisecondes s’écoulent avant qu’un autre thread appelle la méthode Pulse ou PulseAll de cet objet, le thread d’origine est déplacé vers la file d’attente opérationnelle afin de récupérer le verrou.However, if timeout milliseconds elapse before another thread invokes this object's Pulse or PulseAll method, the original thread is moved to the ready queue in order to regain the lock.

Note

Si un TimeSpan représentant-1 milliseconde est spécifié pour le paramètre timeout, cette méthode se bloque indéfiniment, sauf si le détenteur du verrou appelle Pulse ou PulseAll.If a TimeSpan representing -1 millisecond is specified for the timeout parameter, this method blocks indefinitely unless the holder of the lock calls Pulse or PulseAll. Si timeout est égal à 0 milliseconde, le thread qui appelle Wait libère le verrou, puis entre immédiatement dans la file d’attente opérationnelle pour récupérer le verrou.If timeout is 0 milliseconds, the thread that calls Wait releases the lock and then immediately enters the ready queue in order to regain the lock.

L’appelant s’exécute Wait une fois, quel que soit le nombre de fois où Enter a été appelé pour l’objet spécifié.The caller executes Wait once, regardless of the number of times Enter has been invoked for the specified object. Conceptuellement, la méthode Wait stocke le nombre de fois que l’appelant a appelé Enter sur l’objet et appelle Exit autant de fois que nécessaire pour libérer complètement l’objet verrouillé.Conceptually, the Wait method stores the number of times the caller invoked Enter on the object and invokes Exit as many times as necessary to fully release the locked object. L’appelant se bloque ensuite pendant qu’il attend de réacquérir l’objet.The caller then blocks while waiting to reacquire the object. Lorsque l’appelant réacquière le verrou, le système appelle Enter autant de fois que nécessaire pour restaurer le nombre de Enter enregistrés pour l’appelant.When the caller reacquires the lock, the system calls Enter as many times as necessary to restore the saved Enter count for the caller. L’appel de Wait libère le verrou pour l’objet spécifié uniquement ; Si l’appelant est le propriétaire de verrous sur d’autres objets, ces verrous ne sont pas libérés.Calling Wait releases the lock for the specified object only; if the caller is the owner of locks on other objects, these locks are not released.

Note

Un objet synchronisé contient plusieurs références, y compris une référence au thread qui détient actuellement le verrou, une référence à la file d’attente opérationnelle, qui contient les threads prêts à obtenir le verrou, et une référence à la file d’attente en attente, qui contient les threads en attente de notification d’une modification de l’état de l’objet.A synchronized object holds several references, including a reference to the thread that currently holds the lock, a reference to the ready queue, which contains the threads that are ready to obtain the lock, and a reference to the waiting queue, which contains the threads that are waiting for notification of a change in the object's state.

Les méthodes Pulse, PulseAllet Wait doivent être appelées à partir d’un bloc de code synchronisé.The Pulse, PulseAll, and Wait methods must be invoked from within a synchronized block of code.

Les remarques relatives à la méthode Pulse expliquent ce qui se produit si Pulse est appelé quand aucun thread n’attend.The remarks for the Pulse method explain what happens if Pulse is called when no threads are waiting.

Remarques sur la sortie du contexteNotes on Exiting the Context

Le paramètreexitContext n’a aucun effet, à moins que la méthode Wait soit appelée à partir d’un contexte managé non défini par défaut.TheexitContext parameter has no effect unless the Wait method is called from inside a nondefault managed context. Cela peut se produire si votre thread est à l’intérieur d’un appel à une instance d’une classe dérivée de ContextBoundObject.This can happen if your thread is inside a call to an instance of a class derived from ContextBoundObject. Même si vous exécutez actuellement une méthode sur une classe qui n’est pas dérivée de ContextBoundObject, comme String, vous pouvez être dans un contexte non défini par défaut si un ContextBoundObject se trouve sur votre pile dans le domaine d’application actuel.Even if you are currently executing a method on a class that is not derived from ContextBoundObject, like String, you can be in a nondefault context if a ContextBoundObject is on your stack in the current application domain.

Lorsque votre code s’exécute dans un contexte non défini par défaut, la spécification de true pour exitContext amène le thread à quitter le contexte managé non défini par défaut (c’est-à-dire à passer au contexte par défaut) avant d’exécuter la méthode Wait.When your code is executing in a nondefault context, specifying true for exitContext causes the thread to exit the nondefault managed context (that is, to transition to the default context) before executing the Wait method. Elle retourne au contexte par défaut d’origine après l’appel à la méthode Wait.It returns to the original nondefault context after the call to the Wait method completes.

Cela peut être utile lorsque l’attribut SynchronizationAttribute est appliqué à la classe liée au contexte.This can be useful when the context-bound class has the SynchronizationAttribute attribute applied. Dans ce cas, tous les appels aux membres de la classe sont automatiquement synchronisés et le domaine de synchronisation est le corps entier du code pour la classe.In that case, all calls to members of the class are automatically synchronized, and the synchronization domain is the entire body of code for the class. Si le code de la pile des appels d’un membre appelle la méthode Wait et spécifie true pour exitContext, le thread quitte le domaine de synchronisation, ce qui permet à un thread qui est bloqué sur un appel à n’importe quel membre de l’objet de continuer.If code in the call stack of a member calls the Wait method and specifies true for exitContext, the thread exits the synchronization domain, allowing a thread that is blocked on a call to any member of the object to proceed. Quand la méthode Wait retourne, le thread qui a effectué l’appel doit attendre pour entrer de nouveau dans le domaine de synchronisation.When the Wait method returns, the thread that made the call must wait to reenter the synchronization domain.

See also

Applies to