Condividi tramite


Monitor.Wait Metodo

Definizione

Rilascia il blocco su un oggetto e interrompe il thread corrente finché riacquisisce il blocco.

Overload

Wait(Object, Int32, Boolean)

Rilascia il blocco su un oggetto e interrompe il thread corrente finché riacquisisce il blocco. Allo scadere dell'intervallo di timeout specificato, il thread viene inserito nella coda di thread pronti. Questo metodo consente anche di specificare se il dominio di sincronizzazione per il contesto, qualora si trovi in un contesto di sincronizzazione, viene terminato prima dell'attesa e riacquisito in un secondo momento.

Wait(Object)

Rilascia il blocco su un oggetto e interrompe il thread corrente finché riacquisisce il blocco.

Wait(Object, Int32)

Rilascia il blocco su un oggetto e interrompe il thread corrente finché riacquisisce il blocco. Allo scadere dell'intervallo di timeout specificato, il thread viene inserito nella coda di thread pronti.

Wait(Object, TimeSpan)

Rilascia il blocco su un oggetto e interrompe il thread corrente finché riacquisisce il blocco. Allo scadere dell'intervallo di timeout specificato, il thread viene inserito nella coda di thread pronti.

Wait(Object, TimeSpan, Boolean)

Rilascia il blocco su un oggetto e interrompe il thread corrente finché riacquisisce il blocco. Allo scadere dell'intervallo di timeout specificato, il thread viene inserito nella coda di thread pronti. Esce eventualmente dal dominio di sincronizzazione per il contesto di sincronizzazione prima dell'attesa e riacquisisce il dominio in un secondo momento.

Wait(Object, Int32, Boolean)

Origine:
Monitor.cs
Origine:
Monitor.cs
Origine:
Monitor.cs

Rilascia il blocco su un oggetto e interrompe il thread corrente finché riacquisisce il blocco. Allo scadere dell'intervallo di timeout specificato, il thread viene inserito nella coda di thread pronti. Questo metodo consente anche di specificare se il dominio di sincronizzazione per il contesto, qualora si trovi in un contesto di sincronizzazione, viene terminato prima dell'attesa e riacquisito in un secondo momento.

public:
 static bool Wait(System::Object ^ obj, int millisecondsTimeout, bool exitContext);
public static bool Wait (object obj, int millisecondsTimeout, bool exitContext);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait (object obj, int millisecondsTimeout, bool exitContext);
static member Wait : obj * int * bool -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj * int * bool -> bool
Public Shared Function Wait (obj As Object, millisecondsTimeout As Integer, exitContext As Boolean) As Boolean

Parametri

obj
Object

Oggetto per il quale attendere.

millisecondsTimeout
Int32

Numero di millisecondi da attendere prima che il thread venga inserito nella coda di thread pronti.

exitContext
Boolean

true per uscire e riacquisire il dominio di sincronizzazione per il contesto, se si trova in un contesto sincronizzato, prima dell'attesa; in caso contrario, false.

Restituisce

true se il blocco è stato riacquisito prima che sia trascorso il tempo specificato; false se il blocco è stato riacquisito dopo che è trascorso il tempo specificato. Il metodo non restituisce alcun valore finché il blocco non viene riacquisito.

Attributi

Eccezioni

Il valore del parametro obj è null.

Wait non viene richiamato dall'interno di un blocco di codice sincronizzato.

Il thread da cui è stato richiamato Wait viene interrotto in seguito dallo stato di attesa. L'interruzione si verifica quando il metodo Interrupt() di questo thread viene chiamato da un altro thread.

Il valore del parametro millisecondsTimeout è negativo e non è uguale a Infinite.

Commenti

Per altre informazioni su questa API, vedere Osservazioni api supplementari per Monitor.Wait.

Vedi anche

Si applica a

Wait(Object)

Origine:
Monitor.cs
Origine:
Monitor.cs
Origine:
Monitor.cs

Rilascia il blocco su un oggetto e interrompe il thread corrente finché riacquisisce il blocco.

public:
 static bool Wait(System::Object ^ obj);
public static bool Wait (object obj);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait (object obj);
static member Wait : obj -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj -> bool
Public Shared Function Wait (obj As Object) As Boolean

Parametri

obj
Object

Oggetto per il quale attendere.

Restituisce

Viene restituito true se la chiamata è stata restituita perché il chiamante ha riacquisito il blocco per l'oggetto specificato. Non viene restituito alcun valore se il blocco non viene riacquisito.

Attributi

Eccezioni

Il valore del parametro obj è null.

Il thread chiamante non è il proprietario del blocco per l'oggetto specificato.

Il thread da cui è stato richiamato Wait viene interrotto in seguito dallo stato di attesa. L'interruzione si verifica quando il metodo Interrupt() di questo thread viene chiamato da un altro thread.

Commenti

Il thread che possiede attualmente il blocco sull'oggetto specificato richiama questo metodo per rilasciare l'oggetto in modo che un altro thread possa accedervi. Il chiamante viene bloccato durante l'attesa di riacquisire il blocco. Questo metodo viene chiamato quando il chiamante deve attendere una modifica dello stato che si verificherà come risultato delle operazioni di un altro thread.

Quando un thread chiama Wait, rilascia il blocco sull'oggetto e immette la coda in attesa dell'oggetto. Il thread successivo nella coda pronta dell'oggetto (se presente) acquisisce il blocco e ha l'uso esclusivo dell'oggetto. Tutti i thread che chiamano Wait rimangono nella coda in attesa finché non ricevono un segnale da Pulse o PulseAll, inviati dal proprietario del blocco. Se Pulse viene inviato, viene interessato solo il thread alla testa della coda di attesa. Se PulseAll viene inviato, tutti i thread in attesa dell'oggetto sono interessati. Quando il segnale viene ricevuto, uno o più thread lasciano la coda in attesa e immettere la coda pronta. Un thread nella coda pronta è autorizzato a riacquisire il blocco.

Questo metodo restituisce quando il thread chiamante riacquisi il blocco sull'oggetto. Si noti che questo metodo blocca indefinito se il titolare del blocco non chiama Pulse o PulseAll.

Il chiamante viene eseguito Wait una volta, indipendentemente dal numero di volte Enter richiamato per l'oggetto specificato. Concettualmente, il metodo archivia il numero di volte in cui il Wait chiamante richiamato Enter sull'oggetto e richiama Exit il numero di volte necessario per rilasciare completamente l'oggetto bloccato. Il chiamante blocca quindi durante l'attesa di riacquisire l'oggetto. Quando il chiamante riacquise il blocco, il sistema chiama Enter il numero di volte necessario per ripristinare il conteggio salvato Enter per il chiamante. La chiamata Wait rilascia il blocco solo per l'oggetto specificato. Se il chiamante è il proprietario dei blocchi su altri oggetti, questi blocchi non vengono rilasciati.

Si noti che un oggetto sincronizzato contiene diversi riferimenti, tra cui un riferimento al thread che attualmente contiene il blocco, un riferimento alla coda pronta, che contiene i thread pronti per ottenere il blocco e un riferimento alla coda in attesa, che contiene i thread in attesa della notifica di una modifica nello stato dell'oggetto.

I Pulsemetodi , PulseAlle Wait devono essere richiamati da un blocco sincronizzato di codice.

Le osservazioni per il Pulse metodo spiegano cosa accade se viene chiamato quando Pulse non sono in attesa di thread.

Vedi anche

Si applica a

Wait(Object, Int32)

Origine:
Monitor.CoreCLR.cs
Origine:
Monitor.CoreCLR.cs
Origine:
Monitor.CoreCLR.cs

Rilascia il blocco su un oggetto e interrompe il thread corrente finché riacquisisce il blocco. Allo scadere dell'intervallo di timeout specificato, il thread viene inserito nella coda di thread pronti.

public:
 static bool Wait(System::Object ^ obj, int millisecondsTimeout);
public static bool Wait (object obj, int millisecondsTimeout);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait (object obj, int millisecondsTimeout);
static member Wait : obj * int -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj * int -> bool
Public Shared Function Wait (obj As Object, millisecondsTimeout As Integer) As Boolean

Parametri

obj
Object

Oggetto per il quale attendere.

millisecondsTimeout
Int32

Numero di millisecondi da attendere prima che il thread venga inserito nella coda di thread pronti.

Restituisce

true se il blocco è stato riacquisito prima che sia trascorso il tempo specificato; false se il blocco è stato riacquisito dopo che è trascorso il tempo specificato. Il metodo non restituisce alcun valore finché il blocco non viene riacquisito.

Attributi

Eccezioni

Il valore del parametro obj è null.

Il thread chiamante non è il proprietario del blocco per l'oggetto specificato.

Il thread da cui è stato richiamato Wait viene interrotto in seguito dallo stato di attesa. L'interruzione si verifica quando il metodo Interrupt() di questo thread viene chiamato da un altro thread.

Il valore del parametro millisecondsTimeout è negativo e non è uguale a Infinite.

Commenti

Questo metodo non restituisce finché non riacquise un blocco esclusivo sul obj parametro.

Il thread che possiede attualmente il blocco sull'oggetto specificato richiama questo metodo per rilasciare l'oggetto in modo che un altro thread possa accedervi. Il chiamante viene bloccato durante l'attesa di riacquisire il blocco. Questo metodo viene chiamato quando il chiamante deve attendere una modifica dello stato che si verificherà come risultato delle operazioni di un altro thread.

Il timeout garantisce che il thread corrente non blocchi in modo indefinito se un altro thread rilascia il blocco senza prima chiamare il Pulse metodo o PulseAll . Sposta anche il thread nella coda pronta, ignorando altri thread prima della coda di attesa, in modo che possa riacquisire il blocco prima. Il thread può testare il valore restituito del Wait metodo per determinare se viene riacquisibile il blocco prima del timeout. Il thread può valutare le condizioni che hanno causato l'immissione dell'attesa e, se necessario, chiamare di nuovo il Wait metodo.

Quando un thread chiama Wait, rilascia il blocco sull'oggetto e immette la coda in attesa dell'oggetto. Il thread successivo nella coda pronta dell'oggetto (se presente) acquisisce il blocco e ha l'uso esclusivo dell'oggetto. Il thread richiamato Wait rimane nella coda in attesa fino a quando un thread che contiene il blocco richiama PulseAll, oppure è il successivo nella coda e un thread che contiene il blocco richiama Pulse. Tuttavia, se millisecondsTimeout trascorso prima che un altro thread richiama il metodo o PulseAll l'oggettoPulse, il thread originale viene spostato nella coda pronta per recuperare il blocco.

Nota

Se Infinite viene specificato per il millisecondsTimeout parametro, questo metodo blocca indefinito a meno che il titolare delle chiamate Pulse di blocco o PulseAll. Se millisecondsTimeout uguale a 0, il thread che chiama Wait rilascia il blocco e quindi entra immediatamente nella coda pronta per recuperare il blocco.

Il chiamante viene eseguito Wait una volta, indipendentemente dal numero di volte Enter richiamato per l'oggetto specificato. Concettualmente, il metodo archivia il numero di volte in cui il Wait chiamante richiamato Enter sull'oggetto e richiama Exit il numero di volte necessario per rilasciare completamente l'oggetto bloccato. Il chiamante blocca quindi durante l'attesa di riacquisire l'oggetto. Quando il chiamante riacquise il blocco, il sistema chiama Enter il numero di volte necessario per ripristinare il conteggio salvato Enter per il chiamante. La chiamata Wait rilascia il blocco solo per l'oggetto specificato. Se il chiamante è il proprietario dei blocchi su altri oggetti, questi blocchi non vengono rilasciati.

Nota

Un oggetto sincronizzato contiene diversi riferimenti, tra cui un riferimento al thread che attualmente contiene il blocco, un riferimento alla coda pronta, che contiene i thread pronti per ottenere il blocco e un riferimento alla coda in attesa, che contiene i thread in attesa della notifica di una modifica nello stato dell'oggetto.

I Pulsemetodi , PulseAlle Wait devono essere richiamati da un blocco sincronizzato di codice.

Le osservazioni per il Pulse metodo spiegano cosa accade se viene chiamato quando Pulse non sono in attesa thread.

Vedi anche

Si applica a

Wait(Object, TimeSpan)

Origine:
Monitor.cs
Origine:
Monitor.cs
Origine:
Monitor.cs

Rilascia il blocco su un oggetto e interrompe il thread corrente finché riacquisisce il blocco. Allo scadere dell'intervallo di timeout specificato, il thread viene inserito nella coda di thread pronti.

public:
 static bool Wait(System::Object ^ obj, TimeSpan timeout);
public static bool Wait (object obj, TimeSpan timeout);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait (object obj, TimeSpan timeout);
static member Wait : obj * TimeSpan -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj * TimeSpan -> bool
Public Shared Function Wait (obj As Object, timeout As TimeSpan) As Boolean

Parametri

obj
Object

Oggetto per il quale attendere.

timeout
TimeSpan

Oggetto TimeSpan che rappresenta il tempo di attesa prima che il thread venga inserito nella coda di thread pronti.

Restituisce

true se il blocco è stato riacquisito prima che sia trascorso il tempo specificato; false se il blocco è stato riacquisito dopo che è trascorso il tempo specificato. Il metodo non restituisce alcun valore finché il blocco non viene riacquisito.

Attributi

Eccezioni

Il valore del parametro obj è null.

Il thread chiamante non è il proprietario del blocco per l'oggetto specificato.

Il thread da cui è stato richiamato Wait viene interrotto in seguito dallo stato di attesa. L'interruzione si verifica quando il metodo Interrupt() di questo thread viene chiamato da un altro thread.

Il valore del timeout parametro in millisecondi è negativo e non rappresenta Infinite (-1 millisecondo) o è maggiore di Int32.MaxValue.

Commenti

Questo metodo non restituisce finché non riacquise un blocco esclusivo sul obj parametro .

Il thread che attualmente possiede il blocco sull'oggetto specificato richiama questo metodo per rilasciare l'oggetto in modo che un altro thread possa accedervi. Il chiamante viene bloccato durante l'attesa di riacquisire il blocco. Questo metodo viene chiamato quando il chiamante deve attendere una modifica dello stato che si verificherà in seguito alle operazioni di un altro thread.

Il timeout garantisce che il thread corrente non blocchi per un periodo illimitato se un altro thread rilascia il blocco senza prima chiamare il Pulse metodo o PulseAll . Sposta anche il thread nella coda pronta, ignorando altri thread in anticipo nella coda di attesa, in modo che possa riacquisire il blocco prima. Il thread può testare il valore restituito del Wait metodo per determinare se ha riacquisto il blocco prima del timeout. Il thread può valutare le condizioni che ne hanno causato l'immissione nell'attesa e, se necessario, chiamare di nuovo il Wait metodo.

Quando un thread chiama Wait, rilascia il blocco sull'oggetto e immette la coda di attesa dell'oggetto. Il thread successivo nella coda pronta dell'oggetto (se presente) acquisisce il blocco e ha l'uso esclusivo dell'oggetto. Il thread richiamato Wait rimane nella coda in attesa fino a quando un thread che contiene il blocco richiama PulseAlloppure è il successivo nella coda e un thread che contiene il blocco richiama Pulse. Tuttavia, se timeout è trascorso prima che un altro thread richiami il metodo o PulseAll di Pulse questo oggetto, il thread originale viene spostato nella coda pronta per recuperare il blocco.

Nota

Se per il timeout parametro viene specificato un oggetto TimeSpan che rappresenta -1 millisecondi, questo metodo viene bloccato per un periodo illimitato, a meno che il titolare del blocco non chiami Pulse o PulseAll. Se timeout è 0 millisecondi, il thread che chiama Wait rilascia il blocco e quindi entra immediatamente nella coda pronta per recuperare il blocco.

Il chiamante viene Wait eseguito una sola volta, indipendentemente dal numero di chiamate Enter per l'oggetto specificato. Concettualmente, il Wait metodo archivia il numero di volte in cui il chiamante richiamato Enter sull'oggetto e richiama Exit il numero di volte necessario per rilasciare completamente l'oggetto bloccato. Il chiamante blocca quindi durante l'attesa di riacquisire l'oggetto. Quando il chiamante riacquise il blocco, il sistema chiama Enter il numero di volte necessario per ripristinare il conteggio salvato Enter per il chiamante. La chiamata Wait rilascia il blocco solo per l'oggetto specificato. Se il chiamante è il proprietario dei blocchi su altri oggetti, questi blocchi non vengono rilasciati.

Nota

Un oggetto sincronizzato contiene diversi riferimenti, tra cui un riferimento al thread che attualmente contiene il blocco, un riferimento alla coda pronta, che contiene i thread pronti per ottenere il blocco e un riferimento alla coda in attesa, che contiene i thread in attesa della notifica di una modifica nello stato dell'oggetto.

I Pulsemetodi , PulseAlle Wait devono essere richiamati dall'interno di un blocco di codice sincronizzato.

Le osservazioni per il Pulse metodo spiegano cosa accade se viene chiamato quando Pulse non sono in attesa thread.

Vedi anche

Si applica a

Wait(Object, TimeSpan, Boolean)

Origine:
Monitor.cs
Origine:
Monitor.cs
Origine:
Monitor.cs

Rilascia il blocco su un oggetto e interrompe il thread corrente finché riacquisisce il blocco. Allo scadere dell'intervallo di timeout specificato, il thread viene inserito nella coda di thread pronti. Esce eventualmente dal dominio di sincronizzazione per il contesto di sincronizzazione prima dell'attesa e riacquisisce il dominio in un secondo momento.

public:
 static bool Wait(System::Object ^ obj, TimeSpan timeout, bool exitContext);
public static bool Wait (object obj, TimeSpan timeout, bool exitContext);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait (object obj, TimeSpan timeout, bool exitContext);
static member Wait : obj * TimeSpan * bool -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj * TimeSpan * bool -> bool
Public Shared Function Wait (obj As Object, timeout As TimeSpan, exitContext As Boolean) As Boolean

Parametri

obj
Object

Oggetto per il quale attendere.

timeout
TimeSpan

Oggetto TimeSpan che rappresenta il tempo di attesa prima che il thread venga inserito nella coda di thread pronti.

exitContext
Boolean

true per uscire e riacquisire il dominio di sincronizzazione per il contesto, se si trova in un contesto sincronizzato, prima dell'attesa; in caso contrario, false.

Restituisce

true se il blocco è stato riacquisito prima che sia trascorso il tempo specificato; false se il blocco è stato riacquisito dopo che è trascorso il tempo specificato. Il metodo non restituisce alcun valore finché il blocco non viene riacquisito.

Attributi

Eccezioni

Il valore del parametro obj è null.

Wait non viene richiamato dall'interno di un blocco di codice sincronizzato.

Il thread da cui è stato richiamato Wait viene interrotto più tardi dallo stato di attesa. L'interruzione si verifica quando il metodo Interrupt() di questo thread viene chiamato da un altro thread.

Il timeout parametro è negativo e non rappresenta Infinite (-1 millisecondo) o è maggiore di Int32.MaxValue.

Commenti

Per altre informazioni su questa API, vedere Osservazioni supplementari sull'API per Monitor.Wait.

Vedi anche

Si applica a