Condividi tramite


RouteCollection.GetReadLock Metodo

Definizione

Fornisce un oggetto per la gestione della thread safety quando si recupera un oggetto dalla raccolta.

public:
 IDisposable ^ GetReadLock();
public IDisposable GetReadLock ();
member this.GetReadLock : unit -> IDisposable
Public Function GetReadLock () As IDisposable

Restituisce

Oggetto che gestisce la thread safety.

Esempio

Nell'esempio seguente viene illustrato come usare il GetReadLock metodo quando si recupera una route durante l'esecuzione dell'applicazione. L'istruzione Using garantisce che, indipendentemente da ciò che accade in fase di esecuzione quando si legge dalla raccolta ,indipendentemente dal fatto che il codice venga completato normalmente o venga generata un'eccezione, il blocco verrà rilasciato in modo sicuro alla fine del Using blocco di codice.

Commenti

L'oggetto RouteCollection è disponibile per più processi nell'applicazione. Pertanto, se è necessario recuperare una route quando l'applicazione è in esecuzione, usare il metodo per garantire la GetReadLock thread safety. Ottenendo un blocco di lettura sulla raccolta di route, assicurarsi che la raccolta non venga modificata durante il tentativo di recuperarla.

Il GetReadLock metodo impedisce al thread di continuare fino a quando non è possibile acquisire il blocco. Se è presente un blocco di scrittura, il thread attende il completamento dell'aggiornamento e il blocco di scrittura viene rilasciato. Il blocco di lettura sulla raccolta di route viene rilasciato quando l'oggetto IDisposable restituito da questo metodo viene eliminato.

Se non si usa GetReadLock, è possibile che venga visualizzato un errore durante la lettura della RouteCollection raccolta. Si supponga, ad esempio, di scorrere gli oggetti nella RouteCollection raccolta per leggerli, senza chiamare GetReadLock. Mentre si esegue questa operazione, un altro thread da un'altra richiesta potrebbe chiamare GetWriteLock e aggiungere una route alla raccolta. Il primo thread avrà quindi esito negativo con un errore.

Esistono due scenari in cui non è necessario chiamare GetReadLock:

  • Metodi pubblici della RouteCollection classe, GetVirtualPath ad esempio e GetRouteData chiamano GetReadLock internamente. Pertanto, non è necessario chiamare GetReadLock in modo esplicito quando si chiama un metodo pubblico della RouteCollection classe per recuperare i dati dalla raccolta.

  • Quando l'applicazione viene avviata e non elabora ancora le richieste, ad esempio nel Application_Start gestore eventi, viene eseguito un solo thread. Poiché non sono presenti altri thread che potrebbero aggiornare la raccolta durante la lettura, non è necessario chiamare GetReadLock.

Si applica a

Vedi anche