IInputChannel.BeginTryReceive(TimeSpan, AsyncCallback, Object) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
开始用于接收消息的异步操作,该操作具有指定的超时值和状态对象与之关联。
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
参数
- callback
- AsyncCallback
接收异步操作完成通知的 AsyncCallback 委托。
- state
- Object
一个由应用程序指定的对象,包含与异步操作相关联的状态信息。
返回
引用异步接收操作的 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
。