IInputChannel.BeginTryReceive(TimeSpan, AsyncCallback, Object) Metodo

Definizione

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.

Si applica a