anchor.diff:                      do! Async.SwitchToThreadPool ()
                       return res }
   
  +        
  +        let private LinesToBytes ((lines:string array), encoder) =
  +            use memStrm = new System.IO.MemoryStream()
  +            use sWriter = new System.IO.StreamWriter(memStrm, encoder)
  +            lines |> Array.iter (fun line -> sWriter.WriteLine(line))
  +            do sWriter.Flush()
  +            memStrm.ToArray()
   
           type System.IO.File with
               static member AsyncOpenText(path)   = UnblockViaNewThread (fun () -> System.IO.File.OpenText(path))
  
positive.code:             static member AsyncWriteAllLines(path, (lines:string array), ?encoder) = 
                  let enc = match encoder with Some e -> e | None -> System.Text.Encoding.Default
                  async{
                      use memStrm = new System.IO.MemoryStream()
                      use sWriter = new System.IO.StreamWriter(memStrm, enc)
                      lines |> Array.iter (fun line -> sWriter.WriteLine(line))
                      do sWriter.Flush()
                      let bs = memStrm.ToArray()
                      return! System.IO.File.AsyncWriteAllBytes(path, bs)
                }
  
  
negative.code: 
  #if FX_NO_FILE_OPTIONS
  #else
  
              // Aims to take advantage of IO completion ports using FileStream.AsyncWrite and FileOptions.Asynchronous, so no FX_NO_FILE_OPTIONS version
              static member AsyncWriteAllBytes(path, bytes) =
                  let bufferSize = 4096 // as per File.WriteAllBytes
  