gpt4 book ai didi

c# - 具有计数和时间条件的缓冲区运算符

转载 作者:行者123 更新时间:2023-11-30 17:48:33 25 4
gpt4 key购买 nike

我有一个非常冗长的序列,我试图通过批量处理事件来提高它的效率。具有时间和计数条件的 Buffer 运算符似乎符合我的要求,除了一个小的细微差别。当您使用此重载时,订阅会在指定的时间延迟后收到通知,无论缓冲区中是否有任何项目。这真的很烦人,因为大多数时候我的订阅从缓冲区运算符(operator)那里得到一个空列表。考虑到它是一个订阅者在 UI 线程上的多线程应用程序,事实证明它不是批量处理项目的最佳方法。我想知道是否有一种方法可以使用可用的运算符来创建一个序列,该序列会在缓冲区中存在一定数量的项目时触发,或者当特定时间过去时触发,但当且仅当缓冲区中有任何项目时缓冲区。我知道我可以做这样的事情:

sequence.Buffer(TimeSpan.FromSeconds(5), 1).Where(e=>e.Count > 0)

但我想知道是否有另一种方法可以做到这一点,因为不知何故我觉得这不是最好的方法。

最佳答案

我看不出有什么理由为此担心——您有一个惯用的解决方案。空缓冲区是信息,因此框架实现返回它是合理的。无论如何,任何其他方法都可以有效地做与您在内部所做的相同的事情。

当我发现自己使用一小组标准运算符时,我经常将它们包装在更具解释性的扩展方法中。例如:

public static class ObservableExtensions
{
public static IObservable<IList<T>> ToNonEmptyBuffers<T>(
this IObservable<T> source,
TimeSpan timespan,
int count,
IScheduler scheduler = null)
{
scheduler = scheduler ?? Scheduler.Default;
return source.Buffer(timespan, count, scheduler ?? Scheduler.Default)
.Where(buffer => buffer.Count > 0);
}
}

允许:

sequence.ToNonEmptyBuffers(TimeSpan.FromSeconds(5), 1);

关于c# - 具有计数和时间条件的缓冲区运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22867079/

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