示例#1
0
        public static async ValueTask <Maybe <T> > TryReadSafeAsync <T>(this IReadableChannel <T> channel)
        {
            T result;

            while (!channel.TryReadSafe(out result))
            {
                if (!await channel.WaitForNextSafeAsync().ConfigureAwait(false))
                {
                    return(Maybe <T> .Nothing);
                }
            }
            return(new Maybe <T>(result));
        }
示例#2
0
        private static async Task GreetingDuplexStreaming(
            IReadableChannel <GreetingRequest> requestStream,
            IWriteOnlyChannel <GreetingResponse> responseStream,
            MethodCallContext context)
        {
            Console.WriteLine("Received duplex streaming request from {{{0}}}", context);
            var greeting = "Hello!";
            await responseStream.WriteAsync(new GreetingResponse { Greeting = greeting }).ConfigureAwait(false);

            Console.WriteLine("Sent: {0}", greeting);
            while (await requestStream.WaitForNextSafeAsync().ConfigureAwait(false))
            {
                while (requestStream.TryReadSafe(out var request))
                {
                    Console.WriteLine("Received: {0}", request.Name);
                    greeting = $"Hello, {request.Name}!";
                    await responseStream
                    .WriteAsync(new GreetingResponse { Greeting = greeting })
                    .ConfigureAwait(false);

                    Console.WriteLine("Sent: {0}", greeting);
                }
            }
            Console.WriteLine("Request stream completed");
            greeting = "Good Bye!";
            await responseStream
            .WriteAsync(new GreetingResponse { Greeting = greeting })
            .ConfigureAwait(false);

            Console.WriteLine("Sent: {0}", greeting);
            greeting = "See you again!";
            await responseStream
            .WriteAsync(new GreetingResponse { Greeting = greeting })
            .ConfigureAwait(false);

            Console.WriteLine("Sent: {0}", greeting);
            Console.WriteLine("Completed");
        }
示例#3
0
        private static async Task <GreetingResponse> GreetingClientStreaming(
            IReadableChannel <GreetingRequest> requeststream,
            MethodCallContext context)
        {
            Console.WriteLine("Received client streaming request from {{{0}}}", context);
            var names = new List <string>();

            while (await requeststream.WaitForNextSafeAsync().ConfigureAwait(false))
            {
                while (requeststream.TryReadSafe(out var request))
                {
                    Console.WriteLine("Received: {0}", request.Name);
                    names.Add(request.Name);
                }
            }
            Console.WriteLine("Request stream completed");
            var greeting = $"Hello, {string.Join(", ", names)}!";

            Console.WriteLine("Sending response: {0}", greeting);
            return(new GreetingResponse {
                Greeting = greeting
            });
        }