Make Client Side Event Handlers Async (#610)
This commit is contained in:
parent
6332e98d03
commit
d68de2b5ea
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue