diff --git a/src/csharp/Grpc.Core/IAsyncStreamReader.cs b/src/csharp/Grpc.Core/IAsyncStreamReader.cs
index 49e1ea78325..aa3b802a50f 100644
--- a/src/csharp/Grpc.Core/IAsyncStreamReader.cs
+++ b/src/csharp/Grpc.Core/IAsyncStreamReader.cs
@@ -41,10 +41,24 @@ namespace Grpc.Core
{
///
/// A stream of messages to be read.
+ /// Messages can be awaited await reader.MoveNext(), that returns true
+ /// if there is a message available and false if there are no more messages
+ /// (i.e. the stream has been closed).
+ ///
+ /// On the client side, the last invocation of MoveNext() either returns false
+ /// if the call has finished successfully or throws RpcException if call finished
+ /// with an error. Once the call finishes, subsequent invocations of MoveNext() will
+ /// continue yielding the same result (returning false or throwing an exception).
+ ///
+ ///
+ /// On the server side, MoveNext() does not throw exceptions.
+ /// In case of a failure, the request stream will appear to be finished
+ /// (MoveNext will return false) and the CancellationToken
+ /// associated with the call will be cancelled to signal the failure.
+ ///
///
/// The message type.
public interface IAsyncStreamReader : IAsyncEnumerator
{
- // TODO(jtattermusch): consider just using IAsyncEnumerator instead of this interface.
}
}