Share via


IInputChannel.TryReceive(TimeSpan, Message) メソッド

定義

指定された時間内にメッセージの受信を試みます。

public:
 bool TryReceive(TimeSpan timeout, [Runtime::InteropServices::Out] System::ServiceModel::Channels::Message ^ % message);
public bool TryReceive (TimeSpan timeout, out System.ServiceModel.Channels.Message message);
abstract member TryReceive : TimeSpan * Message -> bool
Public Function TryReceive (timeout As TimeSpan, ByRef message As Message) As Boolean

パラメーター

timeout
TimeSpan

いずれかの IAsyncResult メソッドへの呼び出しで返された BeginReceive

message
Message

受信した Message

戻り値

timeout が経過する前にメッセージを受信した場合は true、それ以外の場合は false

例外

操作が完了する前に、指定した timeout が経過しました。

指定したタイムアウトの値が 0 未満です。

このメソッドを実装する方法を次のコードに示します。

public bool TryReceive(TimeSpan timeout, out Message message)
{
    bool result;
    while (true)
    {
        result = this.InnerChannel.TryReceive(timeout, out message);
        if (ProcessReceivedMessage(ref message))
        {
            break;
        }
    }

    return result;
}

注釈

単に TimeoutException を際スローまたはラップするのではなく、タイムアウトを処理する場合は、TryReceive(TimeSpan, Message) ではなく Receive を呼び出す必要があります。

タイムアウトの特別な処理を行わない場合は、単に Receive を呼び出します。そうしないと、エラー情報が失われます。

適用対象