anchor.diff:  
   #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
  
positive.code:                     do! Async.SwitchToThreadPool ()
                      return res }
  
  
          type System.IO.File with
              static member AsyncOpenText(path)   = UnblockViaNewThread (fun () -> System.IO.File.OpenText(path))
  
negative.code:                     return! System.IO.File.AsyncAppendAllBytes(path, bs)
                  }
              
              // Different memory profile to File.AppendAllLines, converts all lines to a byte[] before doing any writing, then a single write op.
              // Not good for writing huge files, but writing one line at a time, as per File.AppendAllLines has its own issues, 
              // e.g. sequential application of async IO (so lines are written in order)
              static member AsyncAppendAllLines(path, (lines:string array), ?encoder) = 
                  let enc = match encoder with Some e -> e | None -> System.Text.Encoding.Default
                  async{
                      let bs = LinesToBytes (lines, enc)
                      return! System.IO.File.AsyncAppendAllBytes(path, bs)
                }
  
  