IInputChannel.BeginTryReceive(TimeSpan, AsyncCallback, Object) 方法

定义

开始用于接收消息的异步操作,该操作具有指定的超时值和状态对象与之关联。

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

参数

timeout
TimeSpan

一个 TimeSpan,指定等待消息变为可用所用的时间间隔。

callback
AsyncCallback

接收异步操作完成通知的 AsyncCallback 委托。

state
Object

一个由应用程序指定的对象,包含与异步操作相关联的状态信息。

返回

IAsyncResult

引用异步接收操作的 IAsyncResult

例外

在操作完成前超出指定的 timeout

指定的超时小于零。

示例

下面的代码演示如何实现此方法:

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

注解

如果需要应用程序处理继续进行而不等待,则使用异步 BeginTryReceive(TimeSpan, AsyncCallback, Object) 方法。 如果当前线程在回复请求消息时可以被阻塞,或者一直被阻塞到超出超时间隔,则使用同步 TryReceive(TimeSpan, Message) 方法。

直到通道中出现消息时或发生超时时才完成操作。

如果您打算处理超时而不仅仅是重新引发或包装 TimeoutException,则应该调用 BeginTryReceive(TimeSpan, AsyncCallback, Object) 而不是 BeginReceive

如果您不打算专门处理超时,则仅调用 BeginReceive,否则将丢失错误信息。

实施者说明

如果超出指定的 false,则操作从 EndTryReceive(IAsyncResult, Message) 返回 timeout

适用于