You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by fl...@apache.org on 2018/08/31 17:33:57 UTC

[4/5] tinkerpop git commit: Minor cleanup TINKERPOP-1774

Minor cleanup TINKERPOP-1774


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/1c7a3def
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/1c7a3def
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/1c7a3def

Branch: refs/heads/TINKERPOP-1774
Commit: 1c7a3def7e483afc19ff6060e1b8206dc15b062d
Parents: d02628b
Author: Florian Hockmann <fh...@florian-hockmann.de>
Authored: Fri Aug 31 18:17:31 2018 +0200
Committer: Florian Hockmann <fh...@florian-hockmann.de>
Committed: Fri Aug 31 19:02:24 2018 +0200

----------------------------------------------------------------------
 .../Gremlin.Net/Driver/AsyncAutoResetEvent.cs   | 27 +++++++++++---------
 1 file changed, 15 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1c7a3def/gremlin-dotnet/src/Gremlin.Net/Driver/AsyncAutoResetEvent.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/AsyncAutoResetEvent.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/AsyncAutoResetEvent.cs
index 52c07b0..873f6a7 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/AsyncAutoResetEvent.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Driver/AsyncAutoResetEvent.cs
@@ -25,7 +25,7 @@ using System;
 using System.Collections.Generic;
 using System.Threading.Tasks;
 
-// The implementation is based on this blog post by Stephen Toub:
+// The implementation of this class is inspired by this blog post from Stephen Toub:
 // https://blogs.msdn.microsoft.com/pfxteam/2012/02/11/building-async-coordination-primitives-part-2-asyncautoresetevent/
 
 namespace Gremlin.Net.Driver
@@ -42,25 +42,19 @@ namespace Gremlin.Net.Driver
         /// <summary>
         ///     Asynchronously waits for this event to be set or until a timeout occurs.
         /// </summary>
-        /// <param name="timeout">A <see cref="TimeSpan"/> that that represents the number of milliseconds to wait.</param>
+        /// <param name="timeout">A <see cref="TimeSpan"/> that represents the number of milliseconds to wait.</param>
         /// <returns>true if the current instance received a signal before timing out; otherwise, false.</returns>
         public async Task<bool> WaitOneAsync(TimeSpan timeout)
         {
             var tcs = new TaskCompletionSource<bool>();
             var waitTask = WaitForSignalAsync(tcs);
-            if (waitTask.IsCompleted) return true;
+            if (waitTask.IsCompleted) return waitTask.Result;
             
             await Task.WhenAny(waitTask, Task.Delay(timeout)).ConfigureAwait(false);
-            lock (_waitingTasks)
-            {
-                if (!waitTask.IsCompleted)
-                {
-                    // The wait timed out, so we need to remove the waiting task.
-                    _waitingTasks.Remove(tcs);
-                    tcs.SetResult(false);
-                }
-            }
+            if (waitTask.IsCompleted) return waitTask.Result;
             
+            StopWaiting(tcs);
+
             return waitTask.Result;
         }
 
@@ -77,6 +71,15 @@ namespace Gremlin.Net.Driver
             }
             return tcs.Task;
         }
+
+        private void StopWaiting(TaskCompletionSource<bool> tcs)
+        {
+            lock (_waitingTasks)
+            {
+                _waitingTasks.Remove(tcs);
+                tcs.SetResult(false);
+            }
+        }
         
         /// <summary>
         ///     Sets the event.