Monitor.Wait Metodo

Definizione

Rilascia il blocco su un oggetto e blocca il thread corrente fino a quando non riacquisi il blocco.

Overload

Nome Descrizione
Wait(Object, Int32, Boolean)

Rilascia il blocco su un oggetto e blocca il thread corrente fino a quando non riacquisi il blocco. Se l'intervallo di timeout specificato scade, il thread entra nella coda pronta. Questo metodo specifica anche se il dominio di sincronizzazione per il contesto (se in un contesto sincronizzato) viene chiuso prima dell'attesa e riacquisire successivamente.

Wait(Object)

Rilascia il blocco su un oggetto e blocca il thread corrente fino a quando non riacquisi il blocco.

Wait(Object, Int32)

Rilascia il blocco su un oggetto e blocca il thread corrente fino a quando non riacquisi il blocco. Se l'intervallo di timeout specificato scade, il thread entra nella coda pronta.

Wait(Object, TimeSpan)

Rilascia il blocco su un oggetto e blocca il thread corrente fino a quando non riacquisi il blocco. Se l'intervallo di timeout specificato scade, il thread entra nella coda pronta.

Wait(Object, TimeSpan, Boolean)

Rilascia il blocco su un oggetto e blocca il thread corrente fino a quando non riacquisi il blocco. Se l'intervallo di timeout specificato scade, il thread entra nella coda pronta. Facoltativamente, esce dal dominio di sincronizzazione per il contesto sincronizzato prima dell'attesa e riacquise il dominio in un secondo momento.

Wait(Object, Int32, Boolean)

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

Rilascia il blocco su un oggetto e blocca il thread corrente fino a quando non riacquisi il blocco. Se l'intervallo di timeout specificato scade, il thread entra nella coda pronta. Questo metodo specifica anche se il dominio di sincronizzazione per il contesto (se in un contesto sincronizzato) viene chiuso prima dell'attesa e riacquisire successivamente.

public:
 static bool Wait(System::Object ^ obj, int millisecondsTimeout, bool exitContext);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait(object obj, int millisecondsTimeout, bool exitContext);
public static bool Wait(object obj, int millisecondsTimeout, bool exitContext);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj * int * bool -> bool
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 in cui attendere.

millisecondsTimeout
Int32

Numero di millisecondi di attesa prima che il thread entri nella coda pronta.

exitContext
Boolean

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

Valori restituiti

true se il blocco è stato riacquisto prima della scadenza del tempo specificato; false se il blocco è stato riacquisto dopo l'intervallo di tempo specificato. Il metodo non restituisce finché non viene riacquisto il blocco.

Attributi

Eccezioni

Il obj parametro è null.

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

Il thread che richiama Wait viene interrotto successivamente dallo stato di attesa. Ciò si verifica quando un altro thread chiama il metodo del Interrupt() thread.

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

Commenti

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

Vedi anche

Si applica a

Wait(Object)

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

Rilascia il blocco su un oggetto e blocca il thread corrente fino a quando non riacquisi 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 in cui attendere.

Valori restituiti

true se la chiamata è stata restituita perché il chiamante ha riacquisto il blocco per l'oggetto specificato. Questo metodo non restituisce se il blocco non viene riacquisto.

Attributi

Eccezioni

Il obj parametro è null.

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

Il thread che richiama Wait viene interrotto successivamente dallo stato di attesa. Ciò si verifica quando un altro thread chiama il metodo del Interrupt() thread.

Commenti

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 nell'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.

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 un uso esclusivo dell'oggetto. Tutti i thread che chiamano Wait rimangono nella coda di attesa fino a quando non ricevono un segnale da Pulse o PulseAll, inviati dal proprietario del blocco. Se Pulse viene inviato, viene interessato solo il thread all'inizio della coda di attesa. Se PulseAll viene inviato, vengono interessati tutti i thread in attesa dell'oggetto. Quando il segnale viene ricevuto, uno o più thread lasciano la coda di attesa e immettono la coda pronta. Un thread nella coda pronta può riacquisire il blocco.

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

Il chiamante esegue Wait una sola volta, indipendentemente dal numero di volte in cui Enter è stato richiamato 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 si blocca quindi durante l'attesa di riacquisire l'oggetto. Quando il chiamante riacquisi il blocco, il sistema chiama Enter il maggior 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 dall'interno di un blocco di codice sincronizzato.

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

Vedi anche

Si applica a

Wait(Object, Int32)

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

Rilascia il blocco su un oggetto e blocca il thread corrente fino a quando non riacquisi il blocco. Se l'intervallo di timeout specificato scade, il thread entra nella coda pronta.

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 in cui attendere.

millisecondsTimeout
Int32

Numero di millisecondi di attesa prima che il thread entri nella coda pronta.

Valori restituiti

true se il blocco è stato riacquisto prima della scadenza del tempo specificato; false se il blocco è stato riacquisto dopo l'intervallo di tempo specificato. Il metodo non restituisce finché non viene riacquisto il blocco.

Attributi

Eccezioni

Il obj parametro è null.

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

Il thread che richiama Wait viene interrotto successivamente dallo stato di attesa. Ciò si verifica quando un altro thread chiama il metodo del Interrupt() thread.

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

Commenti

Questo metodo non restituisce fino a quando non riacquisi 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 nell'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 di pronti, saltando altri thread che lo precedono nella coda di attesa, in modo che possa riacquisire il controllo del lock più rapidamente. Il thread può verificare il valore di ritorno del metodo Wait per determinare se ha riacquistato il lucchetto prima del timeout. Il thread può valutare le condizioni che lo hanno portato a entrare in attesa e, se necessario, chiamare nuovamente il metodo Wait.

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 un uso esclusivo dell'oggetto. Il thread che ha invocato Wait rimane nella coda in attesa fino a quando un thread che detiene il blocco richiama PulseAll, o è il successivo nella coda e un thread che detiene il blocco richiama Pulse. Tuttavia, se millisecondsTimeout trascorre prima che un altro thread richiami i metodi Pulse o PulseAll dell'oggetto, il thread originale viene spostato nella coda pronta per riacquisire il blocco.

Note

Se Infinite viene specificato per il millisecondsTimeout parametro , questo metodo si blocca per un periodo illimitato, a meno che il titolare del blocco non chiami Pulse 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 esegue Wait una sola volta, indipendentemente dal numero di volte in cui Enter è stato richiamato 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 si blocca quindi durante l'attesa di riacquisire l'oggetto. Quando il chiamante riacquisi il blocco, il sistema chiama Enter il maggior 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.

Note

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 metodo Pulse spiegano cosa accade se Pulse viene chiamato quando nessun thread è in attesa.

Vedi anche

Si applica a

Wait(Object, TimeSpan)

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

Rilascia il blocco su un oggetto e blocca il thread corrente fino a quando non riacquisi il blocco. Se l'intervallo di timeout specificato scade, il thread entra nella coda pronta.

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 in cui attendere.

timeout
TimeSpan

Oggetto TimeSpan che rappresenta la quantità di tempo di attesa prima che il thread entri nella coda pronta.

Valori restituiti

true se il blocco è stato riacquisto prima della scadenza del tempo specificato; false se il blocco è stato riacquisto dopo l'intervallo di tempo specificato. Il metodo non restituisce finché non viene riacquisto il blocco.

Attributi

Eccezioni

Il obj parametro è null.

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

Il thread che richiama Wait viene interrotto successivamente dallo stato di attesa. Ciò si verifica quando un altro thread chiama il metodo del Interrupt() 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 fino a quando non riacquisi 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 nell'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 di pronti, saltando altri thread che lo precedono nella coda di attesa, in modo che possa riacquisire il controllo del lock più rapidamente. Il thread può verificare il valore di ritorno del metodo Wait per determinare se ha riacquistato il lucchetto prima del timeout. Il thread può valutare le condizioni che lo hanno portato a entrare in attesa e, se necessario, chiamare nuovamente il metodo Wait.

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 un uso esclusivo dell'oggetto. Il thread che ha invocato Wait rimane nella coda in attesa fino a quando un thread che detiene il blocco richiama PulseAll, o è il successivo nella coda e un thread che detiene il blocco richiama Pulse. Tuttavia, se timeout trascorre prima che un altro thread richiami i metodi Pulse o PulseAll dell'oggetto, il thread originale viene spostato nella coda pronta per riacquisire il blocco.

Note

Se per il TimeSpan parametro viene specificato un oggetto timeout che rappresenta -1 millisecondo, 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 esegue Wait una sola volta, indipendentemente dal numero di volte in cui Enter è stato richiamato 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 si blocca quindi durante l'attesa di riacquisire l'oggetto. Quando il chiamante riacquisi il blocco, il sistema chiama Enter il maggior 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.

Note

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 metodo Pulse spiegano cosa accade se Pulse viene chiamato quando nessun thread è in attesa.

Vedi anche

Si applica a

Wait(Object, TimeSpan, Boolean)

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

Rilascia il blocco su un oggetto e blocca il thread corrente fino a quando non riacquisi il blocco. Se l'intervallo di timeout specificato scade, il thread entra nella coda pronta. Facoltativamente, esce dal dominio di sincronizzazione per il contesto sincronizzato prima dell'attesa e riacquise il dominio in un secondo momento.

public:
 static bool Wait(System::Object ^ obj, TimeSpan timeout, bool exitContext);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait(object obj, TimeSpan timeout, bool exitContext);
public static bool Wait(object obj, TimeSpan timeout, bool exitContext);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj * TimeSpan * bool -> bool
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 in cui attendere.

timeout
TimeSpan

Oggetto TimeSpan che rappresenta la quantità di tempo di attesa prima che il thread entri nella coda pronta.

exitContext
Boolean

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

Valori restituiti

true se il blocco è stato riacquisto prima della scadenza del tempo specificato; false se il blocco è stato riacquisto dopo l'intervallo di tempo specificato. Il metodo non restituisce finché non viene riacquisto il blocco.

Attributi

Eccezioni

Il obj parametro è null.

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

Il thread che richiama Wait viene interrotto successivamente dallo stato di attesa. Ciò si verifica quando un altro thread chiama il metodo del Interrupt() 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