@@ -1654,6 +1654,48 @@ module AsyncSeq =
16541654 return Choice1Of2 ( asyncSeq { for v in res do yield v })
16551655 }
16561656
1657+ #if ( NETSTANDARD2_ 1 || NETCOREAPP3_ 0)
1658+
1659+ let ofAsyncEnum ( source : Collections.Generic.IAsyncEnumerable < _ >) = asyncSeq {
1660+ let! ct = Async.CancellationToken
1661+ let e = source.GetAsyncEnumerator( ct)
1662+ use _ =
1663+ { new IDisposable with
1664+ member __.Dispose () =
1665+ e.DisposeAsync() .AsTask() |> Async.AwaitTask |> Async.RunSynchronously }
1666+
1667+ let mutable currentResult = true
1668+ while currentResult do
1669+ let! r = e.MoveNextAsync() .AsTask() |> Async.AwaitTask
1670+ currentResult <- r
1671+ if r then yield e.Current
1672+ }
1673+
1674+ let toAsyncEnum ( source : AsyncSeq < 'a >) = {
1675+ new Collections.Generic.IAsyncEnumerable< 'a> with
1676+ member __.GetAsyncEnumerator ( cancellationToken : CancellationToken ) =
1677+ let mutable current = Unchecked.defaultof<_>
1678+ let enumerator = source.GetEnumerator()
1679+ { new Collections.Generic.IAsyncEnumerator< 'a> with
1680+ member __.Current = current
1681+ member __.MoveNextAsync () =
1682+ let moveNextAsync = async {
1683+ let! enumerationResult = enumerator.MoveNext()
1684+ match enumerationResult with
1685+ | Some( v) ->
1686+ current <- v
1687+ return true
1688+ | _ -> return false
1689+ }
1690+
1691+ Async.StartAsTask( moveNextAsync, cancellationToken = cancellationToken) |> ValueTask< bool>
1692+ member __.DisposeAsync () =
1693+ enumerator.Dispose()
1694+ ValueTask()
1695+ }
1696+ }
1697+ #endif
1698+
16571699 module AsyncSeqSrcImpl =
16581700
16591701 let private createNode () =
0 commit comments