Example #1
0
        /// <summary>
        /// リクエストの送信を完了させます。
        /// </summary>
        /// <typeparam name="TRequest">リクエストの型</typeparam>
        /// <typeparam name="TResponse">レスポンスの型</typeparam>
        /// <param name="call">呼び出しオブジェクト</param>
        /// <returns>実行結果</returns>
        public static async Task <GrpcResult> CompleteRequestAsync <TRequest, TResponse>(this AsyncClientStreamingCall <TRequest, TResponse> call)
        {
            try
            {
                await call.RequestStream.CompleteAsync().ConfigureAwait(false);

                return(new GrpcResult(call.ToInterface()));
            }
            catch (Exception ex) when(GrpcExceptionUtility.HasRpcException(ex))
            {
                return(HandleException(call, ex));
            }
        }
Example #2
0
        /// <summary>
        /// 全てのリクエストを送信します。
        /// </summary>
        /// <typeparam name="TRequest">リクエストの型</typeparam>
        /// <typeparam name="TResponse">レスポンスの型</typeparam>
        /// <param name="call">呼び出しオブジェクト</param>
        /// <param name="requests">リクエストを取得する処理</param>
        /// <returns>実行結果</returns>
        public static async Task <GrpcResult <TResponse> > WriteAndCompleteAsync <TRequest, TResponse>(this AsyncClientStreamingCall <TRequest, TResponse> call, IEnumerable <AsyncFunc <TRequest> > requests)
            where TRequest : class where TResponse : class
        {
            try
            {
                foreach (AsyncFunc <TRequest> request in requests)
                {
                    await call.RequestStream.WriteAsync(await request().ConfigureAwait(false)).ConfigureAwait(false);
                }

                await CompleteAsyncInternal(call).ConfigureAwait(false);

                return(GrpcResult.Create <TResponse>(await call.ResponseAsync.ConfigureAwait(false), call.ToInterface()));
            }
            catch (Exception ex) when(GrpcExceptionUtility.HasRpcException(ex))
            {
                return(HandleResponseException(call, ex));
            }
        }