File tree Expand file tree Collapse file tree
src/FSharp.Control.AsyncSeq
tests/FSharp.Control.AsyncSeq.Tests Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -207,10 +207,11 @@ module AsyncSeq =
207207 if box resource <> null then resource.Dispose())
208208
209209 member x.For ( seq : seq < 'T >, action : 'T -> AsyncSeq < 'TResult >) =
210- let enum = seq.GetEnumerator()
211- x.TryFinally( x.While(( fun () -> enum .MoveNext()), x.Delay( fun () ->
212- action enum .Current)), ( fun () ->
213- if enum <> null then enum .Dispose() ))
210+ x.Delay( fun () ->
211+ let enum = seq.GetEnumerator()
212+ x.TryFinally( x.While(( fun () -> enum .MoveNext()), x.Delay( fun () ->
213+ action enum .Current)), ( fun () ->
214+ if enum <> null then enum .Dispose() )))
214215
215216 member x.For ( seq : AsyncSeq < 'T >, action : 'T -> AsyncSeq < 'TResult >) =
216217 collect action seq
Original file line number Diff line number Diff line change @@ -383,3 +383,12 @@ let ``AsyncSeq.getIterator should work``() =
383383 | Some _ -> Assert.Fail( " expected None" )
384384
385385
386+
387+ [<Test>]
388+ let ``asyncSeq.For should delay`` () =
389+ let ( s : seq < int >) =
390+ { new System.Collections.Generic.IEnumerable< int> with
391+ member x.GetEnumerator () = failwith " fail"
392+ interface System.Collections.IEnumerable with
393+ member x.GetEnumerator () = failwith " fail" }
394+ Assert.DoesNotThrow( fun _ -> asyncSeq.For( s, ( fun v -> AsyncSeq.empty)) |> ignore)
You can’t perform that action at this time.
0 commit comments