Make Client Side Event Handlers Async (#610)

This commit is contained in:
Mikael Mengistu 2017-06-28 22:39:59 -07:00 committed by GitHub
parent 6332e98d03
commit d68de2b5ea
9 changed files with 60 additions and 18 deletions

View File

@ -41,7 +41,11 @@ namespace ClientSample
{ {
var cts = new CancellationTokenSource(); var cts = new CancellationTokenSource();
connection.Received += data => Console.Out.WriteLineAsync($"{Encoding.UTF8.GetString(data)}"); connection.Received += data => Console.Out.WriteLineAsync($"{Encoding.UTF8.GetString(data)}");
connection.Closed += e => cts.Cancel(); connection.Closed += e =>
{
cts.Cancel();
return Task.CompletedTask;
};
await connection.StartAsync(); await connection.StartAsync();

View File

@ -33,13 +33,13 @@ namespace Microsoft.AspNetCore.SignalR.Client
private int _nextId = 0; private int _nextId = 0;
public event Action Connected public event Func<Task> Connected
{ {
add { _connection.Connected += value; } add { _connection.Connected += value; }
remove { _connection.Connected -= value; } remove { _connection.Connected -= value; }
} }
public event Action<Exception> Closed public event Func<Exception, Task> Closed
{ {
add { _connection.Closed += value; } add { _connection.Closed += value; }
remove { _connection.Closed -= value; } remove { _connection.Closed -= value; }
@ -214,7 +214,7 @@ namespace Microsoft.AspNetCore.SignalR.Client
} }
} }
private void Shutdown(Exception ex = null) private Task Shutdown(Exception ex = null)
{ {
_logger.LogTrace("Shutting down connection"); _logger.LogTrace("Shutting down connection");
if (ex != null) if (ex != null)
@ -240,6 +240,7 @@ namespace Microsoft.AspNetCore.SignalR.Client
} }
_pendingCalls.Clear(); _pendingCalls.Clear();
} }
return Task.CompletedTask;
} }
private Task DispatchInvocationAsync(InvocationMessage invocation, CancellationToken cancellationToken) private Task DispatchInvocationAsync(InvocationMessage invocation, CancellationToken cancellationToken)

View File

@ -13,8 +13,8 @@ namespace Microsoft.AspNetCore.Sockets.Client
Task SendAsync(byte[] data, CancellationToken cancellationToken); Task SendAsync(byte[] data, CancellationToken cancellationToken);
Task DisposeAsync(); Task DisposeAsync();
event Action Connected; event Func<Task> Connected;
event Func<byte[], Task> Received; event Func<byte[], Task> Received;
event Action<Exception> Closed; event Func<Exception, Task> Closed;
} }
} }

View File

@ -34,9 +34,9 @@ namespace Microsoft.AspNetCore.Sockets.Client
public Uri Url { get; } public Uri Url { get; }
public event Action Connected; public event Func<Task> Connected;
public event Func<byte[], Task> Received; public event Func<byte[], Task> Received;
public event Action<Exception> Closed; public event Func<Exception, Task> Closed;
public HttpConnection(Uri url) public HttpConnection(Uri url)
: this(url, TransportType.All) : this(url, TransportType.All)

View File

@ -210,7 +210,11 @@ namespace Microsoft.AspNetCore.Sockets.Client.Tests
try try
{ {
var connectedEventRaisedTcs = new TaskCompletionSource<object>(); var connectedEventRaisedTcs = new TaskCompletionSource<object>();
connection.Connected += () => connectedEventRaisedTcs.SetResult(null); connection.Connected += () =>
{
connectedEventRaisedTcs.SetResult(null);
return Task.CompletedTask;
};
await connection.StartAsync(); await connection.StartAsync();
@ -246,7 +250,11 @@ namespace Microsoft.AspNetCore.Sockets.Client.Tests
try try
{ {
connection.Connected += () => connectedEventRaised = true; connection.Connected += () =>
{
connectedEventRaised = true;
return Task.CompletedTask;
};
await Assert.ThrowsAsync<InvalidOperationException>( await Assert.ThrowsAsync<InvalidOperationException>(
async () => await connection.StartAsync()); async () => await connection.StartAsync());
@ -277,7 +285,11 @@ namespace Microsoft.AspNetCore.Sockets.Client.Tests
var connection = new HttpConnection(new Uri("http://fakeuri.org/"), TransportType.LongPolling, loggerFactory: null, httpMessageHandler: mockHttpHandler.Object); var connection = new HttpConnection(new Uri("http://fakeuri.org/"), TransportType.LongPolling, loggerFactory: null, httpMessageHandler: mockHttpHandler.Object);
var closedEventTcs = new TaskCompletionSource<Exception>(); var closedEventTcs = new TaskCompletionSource<Exception>();
connection.Closed += e => closedEventTcs.SetResult(e); connection.Closed += e =>
{
closedEventTcs.SetResult(e);
return Task.CompletedTask;
};
await connection.StartAsync(); await connection.StartAsync();
await connection.DisposeAsync(); await connection.DisposeAsync();
@ -305,7 +317,11 @@ namespace Microsoft.AspNetCore.Sockets.Client.Tests
var connection = new HttpConnection(new Uri("http://fakeuri.org/"), TransportType.LongPolling, loggerFactory: null, httpMessageHandler: mockHttpHandler.Object); var connection = new HttpConnection(new Uri("http://fakeuri.org/"), TransportType.LongPolling, loggerFactory: null, httpMessageHandler: mockHttpHandler.Object);
var closedEventTcs = new TaskCompletionSource<Exception>(); var closedEventTcs = new TaskCompletionSource<Exception>();
connection.Closed += e => closedEventTcs.TrySetResult(e); connection.Closed += e =>
{
closedEventTcs.TrySetResult(e);
return Task.CompletedTask;
};
try try
{ {
@ -426,7 +442,11 @@ namespace Microsoft.AspNetCore.Sockets.Client.Tests
var connection = new HttpConnection(new Uri("http://fakeuri.org/")); var connection = new HttpConnection(new Uri("http://fakeuri.org/"));
bool closedEventRaised = false; bool closedEventRaised = false;
connection.Closed += e => closedEventRaised = true; connection.Closed += e =>
{
closedEventRaised = true;
return Task.CompletedTask;
};
await connection.DisposeAsync(); await connection.DisposeAsync();
Assert.False(closedEventRaised); Assert.False(closedEventRaised);
@ -615,6 +635,7 @@ namespace Microsoft.AspNetCore.Sockets.Client.Tests
{ {
receiveTcs.TrySetCanceled(); receiveTcs.TrySetCanceled();
} }
return Task.CompletedTask;
}; };
await connection.StartAsync(); await connection.StartAsync();
@ -648,7 +669,11 @@ namespace Microsoft.AspNetCore.Sockets.Client.Tests
try try
{ {
var closeTcs = new TaskCompletionSource<Exception>(); var closeTcs = new TaskCompletionSource<Exception>();
connection.Closed += e => closeTcs.TrySetResult(e); connection.Closed += e =>
{
closeTcs.TrySetResult(e);
return Task.CompletedTask;
};
await connection.StartAsync(); await connection.StartAsync();

View File

@ -138,6 +138,7 @@ namespace Microsoft.AspNetCore.SignalR.Client.Tests
{ {
closeTcs.TrySetException(e); closeTcs.TrySetException(e);
} }
return Task.CompletedTask;
}; };
try try
@ -180,6 +181,7 @@ namespace Microsoft.AspNetCore.SignalR.Client.Tests
{ {
closeTcs.TrySetException(e); closeTcs.TrySetException(e);
} }
return Task.CompletedTask;
}; };
try try

View File

@ -60,7 +60,11 @@ namespace Microsoft.AspNetCore.SignalR.Client.Tests
try try
{ {
var connectedEventRaisedTcs = new TaskCompletionSource<object>(); var connectedEventRaisedTcs = new TaskCompletionSource<object>();
hubConnection.Connected += () => connectedEventRaisedTcs.SetResult(null); hubConnection.Connected += () =>
{
connectedEventRaisedTcs.SetResult(null);
return Task.CompletedTask;
};
await hubConnection.StartAsync(); await hubConnection.StartAsync();
@ -77,7 +81,11 @@ namespace Microsoft.AspNetCore.SignalR.Client.Tests
{ {
var hubConnection = new HubConnection(new TestConnection()); var hubConnection = new HubConnection(new TestConnection());
var closedEventTcs = new TaskCompletionSource<Exception>(); var closedEventTcs = new TaskCompletionSource<Exception>();
hubConnection.Closed += e => closedEventTcs.SetResult(e); hubConnection.Closed += e =>
{
closedEventTcs.SetResult(e);
return Task.CompletedTask;
};
await hubConnection.StartAsync(); await hubConnection.StartAsync();
await hubConnection.DisposeAsync(); await hubConnection.DisposeAsync();

View File

@ -25,9 +25,9 @@ namespace Microsoft.AspNetCore.SignalR.Client.Tests
private CancellationTokenSource _receiveShutdownToken = new CancellationTokenSource(); private CancellationTokenSource _receiveShutdownToken = new CancellationTokenSource();
private Task _receiveLoop; private Task _receiveLoop;
public event Action Connected; public event Func<Task> Connected;
public event Func<byte[], Task> Received; public event Func<byte[], Task> Received;
public event Action<Exception> Closed; public event Func<Exception, Task> Closed;
public Task Started => _started.Task; public Task Started => _started.Task;
public Task Disposed => _disposed.Task; public Task Disposed => _disposed.Task;

View File

@ -111,6 +111,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests
receiveTcs.TrySetResult(null); receiveTcs.TrySetResult(null);
closeTcs.TrySetResult(null); closeTcs.TrySetResult(null);
} }
return Task.CompletedTask;
}; };
logger.LogInformation("Starting connection to {url}", url); logger.LogInformation("Starting connection to {url}", url);
@ -231,6 +232,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests
{ {
closeTcs.TrySetResult(null); closeTcs.TrySetResult(null);
} }
return Task.CompletedTask;
}; };
logger.LogInformation("Starting connection to {url}", url); logger.LogInformation("Starting connection to {url}", url);