diff options
Diffstat (limited to 'src/csharp/Grpc.Core/Internal/ClientStreamingInputObserver.cs')
-rw-r--r-- | src/csharp/Grpc.Core/Internal/ClientStreamingInputObserver.cs | 41 |
1 files changed, 20 insertions, 21 deletions
diff --git a/src/csharp/Grpc.Core/Internal/ClientStreamingInputObserver.cs b/src/csharp/Grpc.Core/Internal/ClientStreamingInputObserver.cs index fb59e86e2d..286c54f2c4 100644 --- a/src/csharp/Grpc.Core/Internal/ClientStreamingInputObserver.cs +++ b/src/csharp/Grpc.Core/Internal/ClientStreamingInputObserver.cs @@ -1,5 +1,4 @@ #region Copyright notice and license - // Copyright 2015, Google Inc. // All rights reserved. // @@ -28,40 +27,40 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - #endregion - using System; using Grpc.Core.Internal; namespace Grpc.Core.Internal { internal class ClientStreamingInputObserver<TWrite, TRead> : IObserver<TWrite> - { + { readonly AsyncCall<TWrite, TRead> call; public ClientStreamingInputObserver(AsyncCall<TWrite, TRead> call) - { + { this.call = call; - } - - public void OnCompleted() - { + } + public void OnCompleted() + { + var taskSource = new AsyncCompletionTaskSource(); + call.StartSendCloseFromClient(taskSource.CompletionDelegate); // TODO: how bad is the Wait here? - call.SendCloseFromClientAsync().Wait(); - } + taskSource.Task.Wait(); + } - public void OnError(Exception error) - { - throw new InvalidOperationException("This should never be called."); - } + public void OnError(Exception error) + { + throw new InvalidOperationException("This should never be called."); + } - public void OnNext(TWrite value) - { + public void OnNext(TWrite value) + { + var taskSource = new AsyncCompletionTaskSource(); + call.StartSendMessage(value, taskSource.CompletionDelegate); // TODO: how bad is the Wait here? - call.SendMessageAsync(value).Wait(); - } - } + taskSource.Task.Wait(); + } + } } - |