diff --git a/src/csharp/Grpc.Core.Tests/ClientServerTest.cs b/src/csharp/Grpc.Core.Tests/ClientServerTest.cs
index eb9cd7cf0cff5af2c793ce5e2f5586efdf3d80f6..08c80bbe534d8fb4c0ba61bb1f09c2c3206cfc1e 100644
--- a/src/csharp/Grpc.Core.Tests/ClientServerTest.cs
+++ b/src/csharp/Grpc.Core.Tests/ClientServerTest.cs
@@ -174,7 +174,7 @@ namespace Grpc.Core.Tests
         }
 
         [Test]
-        public void AsyncUnaryCall_EchoMetadata()
+        public async Task AsyncUnaryCall_EchoMetadata()
         {
             helper.UnaryHandler = new UnaryServerMethod<string, string>(async (request, context) =>
             {
@@ -194,8 +194,7 @@ namespace Grpc.Core.Tests
                 new Metadata.Entry("binary-header-bin", new byte[] { 1, 2, 3, 0, 0xff }),
             };
             var call = Calls.AsyncUnaryCall(helper.CreateUnaryCall(new CallOptions(headers: headers)), "ABC");
-
-            Assert.AreEqual("ABC", call.ResponseAsync.Result);
+            await call;
 
             Assert.AreEqual(StatusCode.OK, call.GetStatus().StatusCode);
 
@@ -218,6 +217,10 @@ namespace Grpc.Core.Tests
         [Test]
         public void UnaryCallPerformance()
         {
+            helper.UnaryHandler = new UnaryServerMethod<string, string>(async (request, context) => {
+                return request;
+            });
+
             var callDetails = helper.CreateUnaryCall();
             BenchmarkUtil.RunBenchmark(100, 100,
                                        () => { Calls.BlockingUnaryCall(callDetails, "ABC"); });
diff --git a/src/csharp/Grpc.Core.Tests/TimeoutsTest.cs b/src/csharp/Grpc.Core.Tests/TimeoutsTest.cs
index a52020cf40250cdfb016322bca8eb08e202468f3..ead0b1854ba0c4314c40df35ad6a1bb6af974d6f 100644
--- a/src/csharp/Grpc.Core.Tests/TimeoutsTest.cs
+++ b/src/csharp/Grpc.Core.Tests/TimeoutsTest.cs
@@ -132,20 +132,16 @@ namespace Grpc.Core.Tests
         }
 
         [Test]
-        public void ServerReceivesCancellationOnTimeout()
+        public async Task ServerReceivesCancellationOnTimeout()
         {
-            object myLock = new object();
-            string receivedCancellation = "NO";
+            var serverReceivedCancellationTcs = new TaskCompletionSource<bool>();
 
             helper.UnaryHandler = new UnaryServerMethod<string, string>(async (request, context) => {
                 // wait until cancellation token is fired.
                 var tcs = new TaskCompletionSource<object>();
                 context.CancellationToken.Register(() => { tcs.SetResult(null); });
                 await tcs.Task;
-                lock (myLock)
-                {
-                    receivedCancellation = "YES";
-                }
+                serverReceivedCancellationTcs.SetResult(true);
                 return "";
             });
 
@@ -153,10 +149,7 @@ namespace Grpc.Core.Tests
             // We can't guarantee the status code always DeadlineExceeded. See issue #2685.
             Assert.Contains(ex.Status.StatusCode, new[] { StatusCode.DeadlineExceeded, StatusCode.Internal });
 
-            lock (myLock)
-            {
-                Assert.AreEqual("YES", receivedCancellation);
-            }
+            Assert.IsTrue(await serverReceivedCancellationTcs.Task);
         }
     }
 }