public async Task SequenceEnumerableTest()
        {
            var builder = new RpcServiceDefinitionsBuilder();

            builder.RegisterService <ISequenceService>();

            var(server, connection) = this.CreateServerAndConnection(builder);
            var sequenceServiceImpl = new SequenceServiceImpl();

            using (var publishedService = server.ServicePublisher.PublishSingleton <ISequenceService>(sequenceServiceImpl))
            {
                try
                {
                    server.Start();

                    var sequenceService = connection.GetServiceSingleton <ISequenceService>();

                    int lastNo = 0;
                    await foreach (var sequenceData in sequenceService.GetSequenceAsEnumerable(5, TimeSpan.FromMilliseconds(0), 0))
                    {
                        Assert.AreEqual(lastNo + 1, sequenceData.SequenceNo);
                        lastNo = sequenceData.SequenceNo;
                    }
                    Assert.AreEqual(5, lastNo);
                }
                finally
                {
                    await server.ShutdownAsync();
                }
            }
        }
        public async Task SequenceEnumerableTimeoutTest()
        {
            var builder = new RpcServiceDefinitionsBuilder();

            builder.RegisterService <ISequenceService>();

            var(server, connection) = this.CreateServerAndConnection(builder,
                                                                     null,
                                                                     o => {
                o.StreamingCallTimeout = TimeSpan.FromSeconds(1);
            });

            var sequenceServiceImpl = new SequenceServiceImpl();

            using var publishedService = server.ServicePublisher.PublishSingleton <ISequenceService>(sequenceServiceImpl);
            try
            {
                server.Start();

                var sequenceService = connection.GetServiceSingleton <ISequenceService>();


                var exceptionExpression = Is.InstanceOf <TimeoutException>();
                if (this.ConnectionType == RpcConnectionType.NetGrpc)
                {
                    // It seems like NetGrpc throws OperationCancelledException instead of DeadlineExceeded RpcException (but
                    // it also seems a bit timing dependent). Let's allow both exceptions.
                    exceptionExpression = exceptionExpression.Or.InstanceOf <OperationCanceledException>();
                }

                DateTime connectStart = DateTime.UtcNow;
                // Force connection
//                sequenceService.SimpleCall();

                var connectDuration = DateTime.UtcNow - connectStart;
                Console.WriteLine("Connect duration: " + connectDuration);

                DateTime start  = DateTime.UtcNow;
                int      lastNo = 0;

                Assert.ThrowsAsync(exceptionExpression, async() =>
                {
                    async Task GetSequence()
                    {
                        await foreach (var sequenceData in sequenceService.GetSequenceAsEnumerable(2000, TimeSpan.FromMilliseconds(1), 1))
                        {
                            Assert.AreEqual(lastNo + 1, sequenceData.SequenceNo);
                            lastNo = sequenceData.SequenceNo;
                        }
                    }

                    await GetSequence().DefaultTimeout();
                });

                TimeSpan duration = DateTime.UtcNow - start;
                Assert.GreaterOrEqual(duration, TimeSpan.FromSeconds(1));
                Assert.Less(duration, TimeSpan.FromSeconds(2));
                Assert.Greater(lastNo, 10);
            }