2018/03/03
一回しか取得できないというのはどうやら間違いです。再調査しています。
"once" という単語を誤って解釈してしまったようです。
ステータスの取得方法
AsyncDuplexStreamingCall<TRequest, TResponse>
完了していないと例外が発生
Gets the call status if the call has already finished. Throws InvalidOperationException otherwise.
非同期メソッドの処理の完了を待ってから GetStatus メソッドを呼び出せばよいのですが、AsyncDuplexStreamingCall<TRequest, TResponse> クラスには処理が完了したかどうかを表すようなプロパティがありません。ResponseHeadersAsync プロパティの IsCompleted プロパティが true かどうかで判断することにしました。
二回呼び出すと例外が発生
もう一つの制約は、二回以上呼び出すと InvalidOperationException 例外が発生するということです。こちらについては XML コメントには記載されていません。
Status can only be accessed once the call has finished.
既に呼び出したかどうかを知るためのプロパティはありません。ステータスに応じた汎用処理を実装しようとした場合、その中で GetStatus メソッドを一回呼び出すことになります。その後、アプリケーションコードでもう一度 GetStatus メソッドを呼び出すと例外が発生します。
アプリケーションコードでは呼び出さないようにするルールを設けてもそれが遵守されるかどうかは保証されません。ラッパークラスを使用するなどし、GetStatus メソッドの呼び出しを制御するような仕組みを考えたほうがよさそうです。
トレーラーも同じ
トレーラーを取得する GetTrailers メソッドも同じです。
0 件のコメント:
コメントを投稿