Finish PipeWriter implementation
This commit is contained in:
parent
5eee3ce92a
commit
79ace3ea63
@ -634,6 +634,8 @@ module Query =
|
||||
|> function it -> $" ORDER BY {it}"
|
||||
|
||||
|
||||
#nowarn "FS3511" // "let rec" is not statically compilable
|
||||
|
||||
open System.IO.Pipelines
|
||||
|
||||
/// <summary>Functions that manipulate <c>PipeWriter</c>s</summary>
|
||||
@ -648,8 +650,7 @@ module PipeWriter =
|
||||
let writeString (writer: PipeWriter) (text: string) = backgroundTask {
|
||||
try
|
||||
let! writeResult = writer.WriteAsync(Encoding.UTF8.GetBytes text)
|
||||
let! flushResult = writer.FlushAsync()
|
||||
return not (writeResult.IsCompleted || flushResult.IsCompleted)
|
||||
return not writeResult.IsCompleted
|
||||
with :? System.ObjectDisposedException -> return false
|
||||
}
|
||||
|
||||
@ -659,19 +660,20 @@ module PipeWriter =
|
||||
/// <returns><c>true</c> if the pipe is still open, <c>false</c> if not</returns>
|
||||
[<CompiledName "WriteStrings">]
|
||||
let writeStrings writer items = backgroundTask {
|
||||
let rec writeNext docs idx = backgroundTask {
|
||||
match items |> Seq.tryItem idx with
|
||||
let theItems = Seq.cache items
|
||||
let rec writeNext idx = backgroundTask {
|
||||
match theItems |> Seq.tryItem idx with
|
||||
| Some item ->
|
||||
if idx > 0 then
|
||||
let! _ = writeString writer ","
|
||||
()
|
||||
match! writeString writer item with
|
||||
| true -> return! writeNext docs (idx + 1)
|
||||
| true -> return! writeNext (idx + 1)
|
||||
| false -> return false
|
||||
| None -> return true
|
||||
}
|
||||
let! _ = writeString writer "["
|
||||
let! isCleanFinish = writeNext items 0
|
||||
let! isCleanFinish = writeNext 0
|
||||
if isCleanFinish then
|
||||
let! _ = writeString writer "]"
|
||||
()
|
||||
|
Loading…
x
Reference in New Issue
Block a user