Compartilhar via


IInputChannel.BeginTryReceive(TimeSpan, AsyncCallback, Object) Método

Definição

Inicia uma operação assíncrona para receber uma mensagem que tem um tempo limite e um objeto de estado especificados associados.

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

Parâmetros

timeout
TimeSpan

O TimeSpan especifica o intervalo de tempo durante o qual aguardar a disponibilidade de uma mensagem.

callback
AsyncCallback

O delegado de AsyncCallback que receberá a notificação da conclusão da operação assíncrona.

state
Object

Um objeto, especificado pelo aplicativo, que contém informações associadas à operação assíncrona.

Retornos

O IAsyncResult que referencia a operação de recebimento assíncrona.

Exceções

O timeout especificado é ultrapassado antes que a operação seja concluída.

O tempo limite especificado é menor que zero.

Exemplos

O código a seguir ilustra como implementar esse método:

public IAsyncResult BeginTryReceive(TimeSpan timeout, AsyncCallback callback, object state)
{
    TryReceiveAsyncResult<TChannel> result = new TryReceiveAsyncResult<TChannel>(this, timeout, callback, state);
    result.Begin();
    return result;
}

Comentários

Use o método assíncrono BeginTryReceive(TimeSpan, AsyncCallback, Object) quando desejar que o processamento do aplicativo continue sem esperar. Use o método síncrono TryReceive(TimeSpan, Message) quando for aceitável que o thread atual seja bloqueado enquanto ele responde à mensagem de solicitação ou até que o intervalo de tempo limite seja excedido.

A operação não é concluída até que uma mensagem fique disponível no canal ou o tempo limite ocorra.

Se você vai lidar com tempos limite e não apenas relançar ou encapsular o TimeoutException, você deve chamar BeginTryReceive(TimeSpan, AsyncCallback, Object) em vez de BeginReceive.

Se você não vai tratar os tempos limite especialmente, basta chamar BeginReceive, caso contrário, você perderá informações de erro.

Notas aos Implementadores

A operação retornará false de EndTryReceive(IAsyncResult, Message) se o especificado timeout for excedido.

Aplica-se a