public void TryGetReader_ReturnsCachedDelegate_WhenTypeImplementsMultipleIAsyncEnumerableContracts()
        {
            // Arrange
            var options          = new MvcOptions();
            var readerFactory    = new AsyncEnumerableReader(options);
            var asyncEnumerable1 = new MultiAsyncEnumerable();
            var asyncEnumerable2 = new MultiAsyncEnumerable();

            // Act
            Assert.True(readerFactory.TryGetReader(asyncEnumerable1.GetType(), out var reader1));
            Assert.True(readerFactory.TryGetReader(asyncEnumerable2.GetType(), out var reader2));

            // Assert
            Assert.Same(reader1, reader2);
        }
        public async Task Reader_ReadsIAsyncEnumerable_ImplementingMultipleAsyncEnumerableInterfaces()
        {
            // This test ensures the reader does not fail if you have a type that implements IAsyncEnumerable for multiple Ts
            // Arrange
            var options         = new MvcOptions();
            var readerFactory   = new AsyncEnumerableReader(options);
            var asyncEnumerable = new MultiAsyncEnumerable();

            // Act
            var result = readerFactory.TryGetReader(asyncEnumerable.GetType(), out var reader);

            // Assert
            Assert.True(result);
            var readCollection = await reader(asyncEnumerable, default);

            var collection = Assert.IsAssignableFrom <ICollection <object> >(readCollection);

            Assert.Equal(new[] { "0", "1", "2", }, collection);
        }