我正在尝试通过从我的数据源中递归读取数据来生成一系列切片。
let rec read stream startFrom (conn : IEventStoreConnection) =
seq {
let size = 10000
let slice = conn.ReadStreamEventsForwardAsync(stream, startFrom, size, true).Result
Console.WriteLine("Events in slice: " + slice.Events.Count().ToString())
if (slice.IsEndOfStream) then
yield slice
else
yield! read stream (startFrom + 1 * size) conn
}
let slices = read "stream-name" 0 conn
Console.WriteLine("TOTAL slices in sequence: " + (Seq.length slices).ToString());
我原以为该序列包含三项,但它似乎只返回一项,即最后一项。
Events in slice: 10000
Events in slice: 10000
Events in slice: 4501
TOTAL slices in sequence: 1
为什么我的递归调用的结果也没有产生?范围界定?
最佳答案
正如 John 已经告诉您的,您还必须 yield 其他切片:
let rec read stream startFrom (conn : IEventStoreConnection) =
seq {
let size = 10000
let slice = conn.ReadStreamEventsForwardAsync(stream, startFrom, size, true).Result
Console.WriteLine("Events in slice: " + slice.Events.Count().ToString())
if (slice.IsEndOfStream)
then
yield slice
else
yield slice // here
yield! read stream (startFrom + 1 * size) conn
}
我认为您可以使用内部函数稍微清理一下:
let read (conn : IEventStoreConnection) stream startFrom =
let size = 10000
let rec loop startFrom =
seq {
let slice = conn.ReadStreamEventsForwardAsync(stream, startFrom, size, true).Result
Console.WriteLine("Events in slice: " + slice.Events.Count().ToString())
if (slice.IsEndOfStream)
then
yield slice
else
yield slice // here
yield! loop (startFrom + 1 * size)
}
loop startFrom
关于.net - 递归序列生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26202165/