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();
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();

View File

@ -33,13 +33,13 @@ namespace Microsoft.AspNetCore.SignalR.Client
private int _nextId = 0;
public event Action Connected
public event Func<Task> Connected
{
add { _connection.Connected += value; }
remove { _connection.Connected -= value; }
}
public event Action<Exception> Closed
public event Func<Exception, Task> Closed
{
add { _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");
if (ex != null)
@ -240,6 +240,7 @@ namespace Microsoft.AspNetCore.SignalR.Client
}
_pendingCalls.Clear();
}
return Task.CompletedTask;
}
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 DisposeAsync();
event Action Connected;
event Func<Task> Connected;
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 event Action Connected;
public event Func<Task> Connected;
public event Func<byte[], Task> Received;
public event Action<Exception> Closed;
public event Func<Exception, Task> Closed;
public HttpConnection(Uri url)
: this(url, TransportType.All)

View File

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

View File

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

View File

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

View File

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

View File

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