Merge pull request #16556 from jtattermusch/csharp_expose_trywaitforstatechanged

C#: Expose TryWaitForStateChangedAsync
pull/16560/merge
Jan Tattermusch 7 years ago committed by GitHub
commit db1b6ac166
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 20
      src/csharp/Grpc.Core.Tests/ChannelConnectivityTest.cs
  2. 4
      src/csharp/Grpc.Core/Channel.cs

@ -57,19 +57,23 @@ namespace Grpc.Core.Tests
[Test] [Test]
public async Task Channel_WaitForStateChangedAsync() public async Task Channel_WaitForStateChangedAsync()
{ {
helper.UnaryHandler = new UnaryServerMethod<string, string>((request, context) =>
{
return Task.FromResult(request);
});
Assert.ThrowsAsync(typeof(TaskCanceledException), Assert.ThrowsAsync(typeof(TaskCanceledException),
async () => await channel.WaitForStateChangedAsync(channel.State, DateTime.UtcNow.AddMilliseconds(10))); async () => await channel.WaitForStateChangedAsync(channel.State, DateTime.UtcNow.AddMilliseconds(0)));
var stateChangedTask = channel.WaitForStateChangedAsync(channel.State); var stateChangedTask = channel.WaitForStateChangedAsync(channel.State);
await channel.ConnectAsync(DateTime.UtcNow.AddMilliseconds(5000));
await stateChangedTask;
Assert.AreEqual(ChannelState.Ready, channel.State);
}
await Calls.AsyncUnaryCall(helper.CreateUnaryCall(), "abc"); [Test]
public async Task Channel_TryWaitForStateChangedAsync()
{
Assert.IsFalse(await channel.TryWaitForStateChangedAsync(channel.State, DateTime.UtcNow.AddMilliseconds(0)));
await stateChangedTask; var stateChangedTask = channel.TryWaitForStateChangedAsync(channel.State);
await channel.ConnectAsync(DateTime.UtcNow.AddMilliseconds(5000));
Assert.IsTrue(await stateChangedTask);
Assert.AreEqual(ChannelState.Ready, channel.State); Assert.AreEqual(ChannelState.Ready, channel.State);
} }

@ -136,7 +136,7 @@ namespace Grpc.Core
/// </summary> /// </summary>
public async Task WaitForStateChangedAsync(ChannelState lastObservedState, DateTime? deadline = null) public async Task WaitForStateChangedAsync(ChannelState lastObservedState, DateTime? deadline = null)
{ {
var result = await WaitForStateChangedInternalAsync(lastObservedState, deadline).ConfigureAwait(false); var result = await TryWaitForStateChangedAsync(lastObservedState, deadline).ConfigureAwait(false);
if (!result) if (!result)
{ {
throw new TaskCanceledException("Reached deadline."); throw new TaskCanceledException("Reached deadline.");
@ -147,7 +147,7 @@ namespace Grpc.Core
/// Returned tasks completes once channel state has become different from /// Returned tasks completes once channel state has become different from
/// given lastObservedState (<c>true</c> is returned) or if the wait has timed out (<c>false</c> is returned). /// given lastObservedState (<c>true</c> is returned) or if the wait has timed out (<c>false</c> is returned).
/// </summary> /// </summary>
internal Task<bool> WaitForStateChangedInternalAsync(ChannelState lastObservedState, DateTime? deadline = null) public Task<bool> TryWaitForStateChangedAsync(ChannelState lastObservedState, DateTime? deadline = null)
{ {
GrpcPreconditions.CheckArgument(lastObservedState != ChannelState.Shutdown, GrpcPreconditions.CheckArgument(lastObservedState != ChannelState.Shutdown,
"Shutdown is a terminal state. No further state changes can occur."); "Shutdown is a terminal state. No further state changes can occur.");

Loading…
Cancel
Save