转换 Task<IAsyncEnumerable<T>> 为 IAsyncEnumerable<T>

这么做还是有一些意义的,避免重复处理Task<IAsyncEnumerable>实在是有些复杂,如果代码还要处理IAsyncEnumerable的话尤为如此,将二者统一还是有一定意义的

        #region AsAsyncEnumerable
        public static async IAsyncEnumerable<T> AsAsyncEnumerable<T>(this System.Threading.Tasks.ValueTask<IAsyncEnumerable<T>> asyncEnumerable)
        {
            await foreach (var one in await asyncEnumerable.ConfigureAwait(false))
            {
                yield return one;
            }
        }
        public static async IAsyncEnumerable<T> AsAsyncEnumerable<T>(this System.Threading.Tasks.ValueTask<IEnumerable<T>> asyncEnumerable)
        {
            foreach (var one in await asyncEnumerable.ConfigureAwait(false))
            {
                yield return one;
            }
        }
        public static async IAsyncEnumerable<T> AsAsyncEnumerable<T>(this System.Threading.Tasks.Task<IEnumerable<T>> asyncEnumerable)
        {
            foreach (var one in await asyncEnumerable.ConfigureAwait(false))
            {
                yield return one;
            }
        }
        public static async IAsyncEnumerable<T> AsAsyncEnumerable<T>(this System.Threading.Tasks.Task<IAsyncEnumerable<T>> asyncEnumerable)
        {
            await foreach(var one in await asyncEnumerable.ConfigureAwait(false))
            {
                yield return one;
            }
        }
        #endregion

 

posted @ 2020-04-11 12:24  yinyue200  阅读(282)  评论(0编辑  收藏  举报
知识共享许可协议
本博客原创内容默认采用知识共享署名 4.0 国际许可协议进行许可。