IInputChannel.BeginTryReceive(TimeSpan, AsyncCallback, Object) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Avvia un'operazione asincrona per ricevere un messaggio con un timeout specificato e un oggetto di stato associato.
public:
IAsyncResult ^ BeginTryReceive(TimeSpan timeout, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginTryReceive(TimeSpan timeout, AsyncCallback callback, object state);
abstract member BeginTryReceive : TimeSpan * AsyncCallback * obj -> IAsyncResult
Public Function BeginTryReceive (timeout As TimeSpan, callback As AsyncCallback, state As Object) As IAsyncResult
Parametri
- timeout
- TimeSpan
Oggetto TimeSpan che specifica l'intervallo di tempo di attesa per la disponibilità di un messaggio.
- callback
- AsyncCallback
Delegato AsyncCallback che riceve la notifica del completamento dell'operazione asincrona.
- state
- Object
Oggetto, specificato dall'applicazione, che contiene informazioni sullo stato associate all'operazione asincrona.
Valori restituiti
Oggetto IAsyncResult che fa riferimento all'operazione di ricezione asincrona.
Eccezioni
L'oggetto specificato timeout viene superato prima del completamento dell'operazione.
Il timeout specificato è minore di zero.
Esempio
Il codice seguente illustra come implementare questo metodo:
public IAsyncResult BeginTryReceive(TimeSpan timeout, AsyncCallback callback, object state)
{
TryReceiveAsyncResult<TChannel> result = new TryReceiveAsyncResult<TChannel>(this, timeout, callback, state);
result.Begin();
return result;
}
Commenti
Usare il metodo asincrono BeginTryReceive(TimeSpan, AsyncCallback, Object) quando si vuole che l'elaborazione dell'applicazione continui senza attendere. Usare il metodo sincrono TryReceive(TimeSpan, Message) quando è accettabile che il thread corrente venga bloccato mentre risponde al messaggio di richiesta o fino a quando non viene superato l'intervallo di timeout.
L'operazione non viene completata fino a quando non viene reso disponibile un messaggio nel canale o si verifica il timeout.
Se si intende gestire i timeout e non solo generare nuovamente o eseguire il wrapping di TimeoutException, è necessario chiamare BeginTryReceive(TimeSpan, AsyncCallback, Object) invece di BeginReceive.
Se non si prevede di trattare i timeout in modo speciale, è sufficiente chiamare BeginReceive, in caso contrario si perdono informazioni sull'errore.
Note per gli implementatori
L'operazione restituisce false se EndTryReceive(IAsyncResult, Message) l'oggetto specificato timeout viene superato.