anchor.diff:          do! awaitConnectionAsync server
           let! keep = connectionLoop server
           if keep then
  -          server.Disconnect()
  +          if not onMono then server.Disconnect()
             return! serverLoop server
           else self.Stop()
         with e -> return errorEvent.Trigger e
  
positive.code:       if not cts.IsCancellationRequested then
          if server.IsConnected then server.WaitForPipeDrain()
          cts.Cancel()
          if server.IsConnected then server.Disconnect()
          server.Dispose()
      with _ -> ()
  
  
negative.code:   | Error of exn
  
  type PipeReceiver<'T>(pipeName: string, processMessage: 'T -> unit, ?singleAccept: bool) as self =
    let onMono = Type.GetType("Mono.Runtime") <> null
    let singleAccept = defaultArg singleAccept false
    let serializer = Serialization.defaultSerializer
  
    let errorEvent = new Event<exn>()
  
    let createServerStreamInstance _ =
      new NamedPipeServerStream(pipeName, PipeDirection.InOut, 1, PipeTransmissionMode.Byte, if onMono then PipeOptions.None else PipeOptions.Asynchronous)
  
    // avoid getting ObjectDisposedException in callback if server has already been disposed
    let awaitConnectionAsync (s: NamedPipeServerStream) =
  