As in the title. Any of these errors only happen when multiple iterations are attempted and the source is a taskSeq CE, not when the source is a user-defined or library defined IAsyncEnumerator<_>, used with the TaskSeq library functions.
I already started investigating this issue and it has to do with properly resetting state when "reaching the end" and when "getting an enumerator over the same resource". See #36 continued: #42.
Operation not valid error, MoveNextAsync()
// this throws: InvalidOperationException: Operation is not valid due to the current state of the object.
task {
let tskSeq = taskSeq { yield 1; yield 2 }
let enum = tskSeq.GetAsyncEnumerator()
let! isNext = enum.MoveNextAsync() // true
let! isNext = enum.MoveNextAsync() // true
let! isNext = enum.MoveNextAsync() // false
let! isNext = enum.MoveNextAsync() // error here
()
}
Operation not valid error, multiple GetAsyncEnumerator() with MoveNextAsync()
// throws: InvalidOperationException: Operation is not valid due to the current state of the object.
task {
let tskSeq = getEmptyVariant variant
use enumerator = tskSeq.GetAsyncEnumerator()
let! isNext = enumerator.MoveNextAsync()
use enumerator = tskSeq.GetAsyncEnumerator()
let! isNext = enumerator.MoveNextAsync() // throws here
()
}
Transition State error
// this throws:
// InvalidOperationException:
// An attempt was made to transition a task to a final state when it had already completed.
task {
let tskSeq = taskSeq { yield 1; yield 2 }
let ts1 = tskSeq |> TaskSeq.map (fun i -> i + 1)
let result1 = TaskSeq.toArray ts1
let ts2 = ts1 |> TaskSeq.map (fun i -> i + 1)
let result2 = TaskSeq.toArray ts2 // error here
()
}
As in the title. Any of these errors only happen when multiple iterations are attempted and the source is a
taskSeqCE, not when the source is a user-defined or library definedIAsyncEnumerator<_>, used with theTaskSeqlibrary functions.I already started investigating this issue and it has to do with properly resetting state when "reaching the end" and when "getting an enumerator over the same resource". See
#36continued: #42.Operation not valid error,
MoveNextAsync()Operation not valid error, multiple
GetAsyncEnumerator()withMoveNextAsync()Transition State error