gpt4 book ai didi

c# - 是否有像 Queue 这样的 C# 类实现 IAsyncEnumerable?

转载 作者:行者123 更新时间:2023-12-04 02:42:51 30 4
gpt4 key购买 nike

两者 QueueConcurrentQueue实现 IEnumerable但不是 IAsyncEnumerable . NuGet 上是否有可用的标准类或类来实现 IAsyncEnumerable这样,如果队列为空,则 MoveNextAsync 的结果直到下一个添加到队列中才完成?

最佳答案

如果您使用 .NET Core 平台,则至少有两个内置选项:

  • System.Threading.Tasks.Dataflow.BufferBlock<T> 类,部分 TPL Dataflow图书馆。它没有实现 IAsyncEnumerable<T> native ,但它暴露了可等待的 OutputAvailableAsync()方法,实现 ToAsyncEnumerable 很简单扩展方法。
  • System.Threading.Channels.Channel<T> class,Channels的核心组件图书馆。它暴露了一个 IAsyncEnumerable<T>通过其实现
    Reader.ReadAllAsync() ¹ 方法。

  • 通过安装 nuget 包(每个类都不同),这两个类也可用于 .NET Framework。 IAsyncEnumerable<T> 的实现为 BufferBlock<T> :
    public static async IAsyncEnumerable<T> ToAsyncEnumerable<T>(
    this IReceivableSourceBlock<T> source,
    [EnumeratorCancellation]CancellationToken cancellationToken = default)
    {
    while (await source.OutputAvailableAsync(cancellationToken).ConfigureAwait(false))
    {
    while (source.TryReceive(out T item))
    {
    yield return item;
    cancellationToken.ThrowIfCancellationRequested();
    }
    }
    await source.Completion.ConfigureAwait(false); // Propagate possible exception
    }
    ¹(不适用于 .NET Framework,但易于在 similar way 中实现)

    关于c# - 是否有像 Queue 这样的 C# 类实现 IAsyncEnumerable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58484958/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com