diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/GrpcBidiConnection.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/GrpcBidiConnection.cs index 6786bf41..448cde55 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/GrpcBidiConnection.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/GrpcBidiConnection.cs @@ -58,8 +58,8 @@ protected override void CloseLibObject() private ConnectionStreamResponse ExecuteBidi(ConnectionStreamRequest request) { var connectionStream = Stream; - connectionStream.RequestStream.WriteAsync(request).GetAwaiter().GetResult(); - if (!connectionStream.ResponseStream.MoveNext(CancellationToken.None).GetAwaiter().GetResult()) + Task.Run(() => connectionStream.RequestStream.WriteAsync(request)).GetAwaiter().GetResult(); + if (!Task.Run(() => connectionStream.ResponseStream.MoveNext(CancellationToken.None)).GetAwaiter().GetResult()) { // This should never happen assuming that the gRPC server is well-behaved. throw new SpannerException(new Status { Code = (int)Code.Internal, Message = "No response received" }); diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/GrpcLibSpanner.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/GrpcLibSpanner.cs index 17f4d985..52c4b29c 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/GrpcLibSpanner.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/GrpcLibSpanner.cs @@ -416,11 +416,18 @@ public void BeginTransaction(Connection connection, TransactionOptions transacti public async Task BeginTransactionAsync(Connection connection, TransactionOptions transactionOptions, CancellationToken cancellationToken = default) { - await TranslateException(() => Client.BeginTransactionAsync(new BeginTransactionRequest + try { - Connection = ToProto(connection), - TransactionOptions = transactionOptions, - })).ConfigureAwait(false); + await Client.BeginTransactionAsync(new BeginTransactionRequest + { + Connection = ToProto(connection), + TransactionOptions = transactionOptions, + }, cancellationToken: cancellationToken).ConfigureAwait(false); + } + catch (RpcException exception) + { + throw SpannerException.ToSpannerException(exception); + } } public CommitResponse? Commit(Connection connection) diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/StreamingRows.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/StreamingRows.cs index 56e54a0e..073da100 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/StreamingRows.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/StreamingRows.cs @@ -164,7 +164,7 @@ private bool TryNextCached(out ListValue? result, CancellationToken cancellation _stream ??= _spanner.ContinueStreaming(SpannerConnection, Id); try { - var hasNext = Task.Run(() => Stream.ResponseStream.MoveNext()).ResultWithUnwrappedExceptions(); + var hasNext = Task.Run(() => Stream.ResponseStream.MoveNext()).GetAwaiter().GetResult(); if (!hasNext) { MarkDone();