- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们正在使用 C# 和 Reactive Extensions 实现一些软件组件。它包含使用 GroupBy
方法拆分 observable 的功能,然后对这些拆分的 observable 执行一些算术运算,然后使用 Merge()
方法将 observable 合并回一起。
如果不使用 maxConcurrent
参数,一切顺利。因为如果使用此参数,数据似乎“丢失”了。
尝试搜索此问题。尝试合并 Observable.Start
和 Observable.Defer
但没有结果。创建了一个真正的小型测试应用程序来展示问题。
var sourceObservable = Enumerable.Range(0, 10)
.Select(x => new { Index = x, Remainder = x % 3 }).ToObservable();
var ungrouped = sourceObservable.Select(x => x.Index);
var limitedGrouping = sourceObservable.GroupBy(x => x.Remainder)
.Select(group => group.Select(x => x.Index)).Merge(maxConcurrent: 2);
var unlimitedGrouping = sourceObservable.GroupBy(x => x.Remainder)
.Select(group => group.Select(x => x.Index)).Merge();
Console.WriteLine($"ungrouped: {string.Join(",", await ungrouped.ToList())}");
Console.WriteLine($"limited: {string.Join(",", await limitedGrouping.ToList())}");
Console.WriteLine($"unlimited: {string.Join(",", await unlimitedGrouping.ToList())}");
预计在这种情况下,“limitedGrouping”内容将与“unlimitedGrouping”内容相同。然而它不是:
未分组:0,1,2,3,4,5,6,7,8,9
有限:0,1,3,4,6,7,9
无限制:0,1,2,3,4,5,6,7,8,9
有限的一个缺少数据编号 2、5 和 8。我们在这里犯了什么错误?
最佳答案
它看起来像是 GroupBy
中预期但令人困惑的功能。此代码是等效的,但同样会失败:
var source = Observable.Range(0, 10);
source
.GroupBy(i => i % 3)
.Merge(2)
.Subscribe(Console.WriteLine); //Outputs 0 1 3 4 6 7 9
这段代码很相似,但是成功了:
var a = source.Where(i => i % 3 == 0);
var b = source.Where(i => i % 3 == 1);
var c = source.Where(i => i % 3 == 2);
var l = new List<IObservable<int>>() { a, b, c };
l.ToObservable()
.Merge(2)
.Subscribe(Console.WriteLine); //Outputs 0 1 3 4 6 7 9 2 5 8
有点迷幻的是:
source
.GroupBy(i => i % 3)
.Concat() //or .Merge(1), those are roughly equivalent.
.Subscribe(Console.WriteLine); //Outputs 0 3 6 9
当我第一次看到它时,我预计所有 Merge(2)
案例都是 0 1 3 4 6 7 9 2 5 8
。我预计 Concat
,基本上是 Merge(1)
为 0 3 6 9 1 4 7 2 5 8
。
maxConcurrent(n)
表示一次只能订阅 n
个可观察对象。如果它接收到超过 n
个 observables,那么它会将额外的 observables 排队,在旧的 observables 结束时稍后订阅。
在我们的例子中,它按顺序接收三个可观察值(mod-0、mod-1 和 mod-2)。它订阅前两个,然后将 mod-2 observable 排队,仅在 mod-0 或 mod-1 完成时订阅。然而,当 mod-0/mod-1 observable 完成时,mod-2 observable 显然也完成了,所以没有收到通知。
当我第一次看到这个时,我认为这是一个错误,因为我认为 GroupBy
的子可观察对象应该是冷的。但看起来它们总体上是温暖的,如果这有任何意义的话:订阅其中一个 child ,其他 child 就会变得炙手可热。这在 GroupBy
可以用作冷或热可观察对象的运算符的上下文中是有意义的,并且没有内置重放功能。
如果你想看到这个演示,考虑这个:
source
.GroupBy(i => i % 3)
.Select(o => o.Take(3))
.Merge(2)
.Subscribe(Console.WriteLine); //Outputs 0 1 3 4 6 7 8
这里 mod-0 observable 从 6 之后取消订阅,第三个 mod-0 数字。 Merge
然后订阅热的 mod-2 observable,输出最后一个 mod-2 数字 8。
希望对您有所帮助。如果您不熟悉可观察温度的 System.Reactive 概念,我推荐 this article .
关于c# - 限制 Observable GroupBy/Merge 组合的并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57788750/
我有一个 ServiceBusQueue(SBQ),它获取大量消息负载。我有一个具有 accessRights(manage) 的 ServiceBusTrigger(SBT),它不断轮询来自 SBQ
在下面给出的结果集中,有 2 个唯一用户 (id),并且查询中可能会出现更多此类用户: 这是多连接查询: select id, name, col1Code, col2Code, col2Va
我正在用 Python 2.7.3 编写一个带有 GRequests 的小脚本和 lxml 可以让我从各种网站收集一些收藏卡价格并进行比较。问题是其中一个网站限制了请求的数量,如果我超过它,就会发回
我想知道何时实际使用删除级联或删除限制以及更新级联或更新限制。我对使用它们或在我的数据库中应用感到很困惑。 最佳答案 在外键约束上使用级联运算符是一个热门话题。 理论上,如果您知道删除父对象也将自动删
下面是我的输出,我只想显示那些重复的名字。每个名字都是飞行员,数字是飞行员驾驶的飞机类型。我想显示驾驶不止一架飞机的飞行员的姓名。我正在使用 sql*plus PIL_PILOTNAME
我正在评估不同的移动框架,我认为 nativescript 是一个不错的选择。但我不知道开发过程是否存在限制。例如,我对样式有限制(这并不重要),但我想知道将来我是否可以有限制并且不能使用某些 nat
我正在尝试使用 grails 数据绑定(bind)将一些表单参数映射到我的模型中,但我认为在映射嵌入式集合方面可能存在一些限制。 例如,如果我提交一些这样的参数,那么映射工作正常: //this wo
是否可以将 django 自过滤器起的时间限制为 7 天。如果日期超过 7 天,则不应用过滤器 最佳答案 timesince 的源代码位于 django/django/utils/timesince.
我想在我的网站上嵌入一个 PayPal 捐赠按钮。但问题是我住在伊朗——这个国家受到制裁,人们不使用国际银行账户或主要信用卡。 有什么想法吗?请帮忙! 问候 沮丧 最佳答案 您可以在伊朗境内使用为伊朗
这是我的查询 select PhoneNumber as _data,PhoneType as _type from contact_phonenumbers where ContactID = 3
这个问题在这里已经有了答案: What is the maximum number of parameters passed to $in query in MongoDB? (4 个答案) 关闭
我的一个项目的 AndroidManifest.xml 变得越来越大(> 1000 行),因为我必须对某些文件类型使用react并且涵盖所有情况变得越来越复杂。我想知道 list 大小是否有任何限制。
在使用 Sybase、Infomix、DB2 等其他数据库产品多年后使用 MySQL 5.1 Enterprise 时;我遇到了 MySQL 不会做的事情。例如,它只能为 SELECT 查询生成 EX
这个问题在这里已经有了答案: What is the maximum number of parameters passed to $in query in MongoDB? (4 个回答) 关闭5年
通常我们是在{$apache}/conf/httpd.conf中设置Apache的参数,然而我们并没有发现可以设置日志文件大小的配置指令,通过参考http://httpd.apache.org/do
我正在搜索最大的 Android SharedPreferences 键值对,但找不到任何好的答案。其次,我想问一下,如果我有一个键,它的字符串值限制是多少。多少字符可以放入其中。如果我需要频繁更改值
我目前正在试验 SoundCloud API,并注意到我对/tracks 资源的 GET 请求一次从不返回超过 200 个结果。关于这个的几个问题: 这个限制是故意的吗? 有没有办法增加这个限制? 如
我正在与一家名为 Dwolla 的金融技术公司合作,该公司提供了一个 API,用于将银行信息附加到用户并收取/发送 ACH 付款。 他们需要我将我的 TLS 最低版本升级到 1.2(禁用 TLS 1.
我在 PHP 中有一个多维数组,如下所示: $array = Array ( [0] => Array ( [bill] => 1 ) [1] => Array ( [
我在获取下一个查询的第一行时遇到了问题: Select mar.Title MarketTitle, ololo.NUMBER, ololo.Title from Markets mar JOIN(
我是一名优秀的程序员,十分优秀!