PR feedback

pull/19059/head
James Newton-King 6 years ago
parent 47660b784b
commit 44bc1cdaeb
No known key found for this signature in database
GPG Key ID: A66B2F456BF5526
  1. 50
      src/csharp/Grpc.Core.Api/AsyncStreamReaderExtensions.cs
  2. 1
      src/csharp/Grpc.Core.Tests/Internal/AsyncCallServerTest.cs
  3. 53
      src/csharp/Grpc.Core/Utils/AsyncStreamExtensions.cs
  4. 1
      src/csharp/Grpc.Reflection.Tests/ReflectionClientServerTest.cs

@ -0,0 +1,50 @@
#region Copyright notice and license
// Copyright 2015 gRPC authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#endregion
using System;
using System.Threading;
using System.Threading.Tasks;
namespace Grpc.Core
{
/// <summary>
/// Extension methods for <see cref="IAsyncStreamReader{T}"/>.
/// </summary>
public static class AsyncStreamReaderExtensions
{
/// <summary>
/// Advances the stream reader to the next element in the sequence, returning the result asynchronously.
/// </summary>
/// <typeparam name="T">The message type.</typeparam>
/// <param name="streamReader">The stream reader.</param>
/// <returns>
/// Task containing the result of the operation: true if the reader was successfully advanced
/// to the next element; false if the reader has passed the end of the sequence.
/// </returns>
public static Task<bool> MoveNext<T>(this IAsyncStreamReader<T> streamReader)
where T : class
{
if (streamReader == null)
{
throw new ArgumentNullException(nameof(streamReader));
}
return streamReader.MoveNext(CancellationToken.None);
}
}
}

@ -23,7 +23,6 @@ using System.Runtime.InteropServices;
using System.Threading.Tasks;
using Grpc.Core.Internal;
using Grpc.Core.Utils;
using NUnit.Framework;
namespace Grpc.Core.Internal.Tests

@ -18,7 +18,6 @@
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace Grpc.Core.Utils
@ -28,41 +27,12 @@ namespace Grpc.Core.Utils
/// </summary>
public static class AsyncStreamExtensions
{
/// <summary>
/// Advances the stream reader to the next element in the sequence, returning the result asynchronously.
/// </summary>
/// <typeparam name="T">The message type.</typeparam>
/// <param name="streamReader">The stream reader.</param>
/// <returns>
/// Task containing the result of the operation: true if the reader was successfully advanced
/// to the next element; false if the reader has passed the end of the sequence.
/// </returns>
public static Task<bool> MoveNext<T>(this IAsyncStreamReader<T> streamReader)
where T : class
{
if (streamReader == null)
{
throw new ArgumentNullException(nameof(streamReader));
}
return streamReader.MoveNext(CancellationToken.None);
}
/// <summary>
/// Reads the entire stream and executes an async action for each element.
/// </summary>
public static async Task ForEachAsync<T>(this IAsyncStreamReader<T> streamReader, Func<T, Task> asyncAction)
where T : class
{
if (streamReader == null)
{
throw new ArgumentNullException(nameof(streamReader));
}
if (asyncAction == null)
{
throw new ArgumentNullException(nameof(asyncAction));
}
while (await streamReader.MoveNext().ConfigureAwait(false))
{
await asyncAction(streamReader.Current).ConfigureAwait(false);
@ -75,11 +45,6 @@ namespace Grpc.Core.Utils
public static async Task<List<T>> ToListAsync<T>(this IAsyncStreamReader<T> streamReader)
where T : class
{
if (streamReader == null)
{
throw new ArgumentNullException(nameof(streamReader));
}
var result = new List<T>();
while (await streamReader.MoveNext().ConfigureAwait(false))
{
@ -95,15 +60,6 @@ namespace Grpc.Core.Utils
public static async Task WriteAllAsync<T>(this IClientStreamWriter<T> streamWriter, IEnumerable<T> elements, bool complete = true)
where T : class
{
if (streamWriter == null)
{
throw new ArgumentNullException(nameof(streamWriter));
}
if (elements == null)
{
throw new ArgumentNullException(nameof(elements));
}
foreach (var element in elements)
{
await streamWriter.WriteAsync(element).ConfigureAwait(false);
@ -120,15 +76,6 @@ namespace Grpc.Core.Utils
public static async Task WriteAllAsync<T>(this IServerStreamWriter<T> streamWriter, IEnumerable<T> elements)
where T : class
{
if (streamWriter == null)
{
throw new ArgumentNullException(nameof(streamWriter));
}
if (elements == null)
{
throw new ArgumentNullException(nameof(elements));
}
foreach (var element in elements)
{
await streamWriter.WriteAsync(element).ConfigureAwait(false);

@ -21,7 +21,6 @@ using System.Text;
using System.Threading.Tasks;
using Grpc.Core;
using Grpc.Core.Utils;
using Grpc.Reflection;
using Grpc.Reflection.V1Alpha;
using NUnit.Framework;

Loading…
Cancel
Save