我正在测试Akka.Net流,以查看是否可以将其集成到我的项目中,而我对GroupedWithin
感到有些困惑。
如果以这种方式使用它,它不会将数据流拆分为多个块,而是只会执行一次:
Akka.Streams.Dsl.Source.Tick(TimeSpan.Zero, TimeSpan.FromMilliseconds(1), new { })
.Select(x => new Measurement { Guid = Guid.NewGuid(), Timestamp = DateTime.Now.Ticks })
.GroupedWithin(1000, TimeSpan.FromMilliseconds(80))
.SelectAsync(2, BulkInsertAsync)
.RunWith(Sink.Ignore<IEnumerable<Measurement>>(), mat);
如果我以这种方式使用它,它的行为将符合预期:
Akka.Streams.Dsl.Source.Tick(TimeSpan.Zero, TimeSpan.FromMilliseconds(1), new { })
.Select(x => new Measurement { Guid = Guid.NewGuid(), Timestamp = DateTime.Now.Ticks })
.GroupedWithin(1000, TimeSpan.FromMilliseconds(80))
.RunForeach(async x => await BulkInsertAsync(x), mat);`
我丢失了某些东西吗?或者应该以这种方式工作?
谢谢。
更新: 这对我有用:
Akka.Streams.Dsl.Source.Tick(TimeSpan.Zero, TimeSpan.FromMilliseconds(1), new { })
.Select(x => new Measurement { Guid = Guid.NewGuid(), Timestamp = DateTime.Now.Ticks })
.GroupedWithin(1000, TimeSpan.FromMilliseconds(80))
.SelectAsync(2, x => {
await BulkInsertAsync(x);
return x;
})
.RunWith(Sink.Ignore<IEnumerable<Measurement>>(), mat);