IInputChannel.BeginTryReceive(TimeSpan, AsyncCallback, Object) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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.