Condividi tramite


IInputChannel.BeginTryReceive(TimeSpan, AsyncCallback, Object) Metodo

Definizione

Avvia un'operazione asincrona per ricevere un messaggio al quale sono associati un timeout e un oggetto di stato specificati.

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 della classe TimeSpan che indica il tempo di attesa necessario affinché un messaggio diventi disponibile.

callback
AsyncCallback

Delegato AsyncCallback che riceve la notifica del completamento dell'operazione asincrona.

state
Object

Oggetto, specificato dall'applicazione, che contiene le informazioni sullo stato associate all'operazione asincrona.

Restituisce

IAsyncResult fa riferimento all'operazione di ricezione asincrona.

Eccezioni

Il timeout specificato è stato superato prima del completamento dell'operazione.

Il timeout specificato è minore di zero.

Esempio

Nell'esempio di codice seguente viene illustrato 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

Se si desidera che l'elaborazione dell'applicazione continui senza attendere, utilizzare il metodo asincrono BeginTryReceive(TimeSpan, AsyncCallback, Object). Nei casi in cui è ammissibile che il thread corrente resti bloccato mentre risponde al messaggio di richiesta o fino al termine dell'intervallo di tempo indicato, utilizzare il metodo sincrono TryReceive(TimeSpan, Message)

L'operazione non è completa fino a quando un messaggio non viene reso disponibile nel canale o non si verifica il timeout.

Se si prevede di gestire i timeout e non solo di generare di nuovo o eseguire il wrapping di TimeoutException, è necessario chiamare BeginTryReceive(TimeSpan, AsyncCallback, Object) anziché BeginReceive.

Se i timeout non verranno trattati in modo speciale, chiamare solo BeginReceive, in caso contrario le informazioni sull'errore andranno perdute.

Note per gli implementatori

L'operazione restituisce false da EndTryReceive(IAsyncResult, Message) se viene superato il timeout specificato.

Si applica a