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.