anchor.diff:                              let! msg = inbox.Receive()
                               match msg with
                               | Die ch ->
  -                                chForReplyToDie := Some ch
                                   if !dataIsEnd 
  -                                    then
  -                                        ch.Reply()
  -                                        return ()
  -                                return! loop n
  +                                then
  +                                    ch.Reply()
  +                                    return ()
  +                                else 
  +                                    inbox.Post(Die ch)
  +                                    return! loop n
                               | InitBuffers (bufs,ch) ->
                                   ch.Reply bufs
                                   bufs |> Array.iter dataToFill.Enqueue                                
                                   return! loop n
                               | Get(ch) -> 
                                   //printfn "GET"
  -                                let b =
  -                                    let s,r = dataToProcess.TryDequeue()
  -                                    if s then 
  -                                        if r.IsNone then dataIsEnd := true
  -                                        r
  -                                    elif not !dataIsEnd
  -                                    then
  -                                        let rec go _ =
  -                                            let s,r = dataToProcess.TryDequeue()                                     
  -                                            if s 
  -                                            then r
  -                                            elif  not !dataIsEnd then go () else None
  -                                        go () //|> Some
  -                                    else None
  -                                if b.IsNone then dataIsEnd := true
  -                                ch.Reply b
  -                                if b.IsSome
  +                                let s,r = dataToProcess.TryDequeue()
  +                                if s
                                   then 
  -                                    return! loop n
  -                                elif chForReplyToDie.Value.IsSome
  -                                then                                     
  -                                    chForReplyToDie.Value.Value.Reply()
  -                                    return ()
  -                                else
  -                                    dataIsEnd := true
  -                                    return! loop n
  +                                    if r.IsNone then dataIsEnd := true
  +                                    ch.Reply r
  +                                elif not !dataIsEnd
  +                                then inbox.Post(Get ch)
  +                                else ch.Reply None
  +                                return! loop n
                               | Enq b -> 
                                   dataToFill.Enqueue b
  -                                //match b with
  -                                //| Some b -> dataToFill.Enqueue b
  -                                //| None -> ()
                                   return! loop n
                               | x ->  
                                   printfn "Unexpected message for Worker: %A" x
  
positive.code:                                             dataManager.Enq b.Value)
                                  else 
                                      isDataEnd := true
                                      //this.Die()
                          if inbox.CurrentQueueLength > 0
                          then
                              let! msg = inbox.Receive()
                              match msg with
                              | Die ch ->
                                  //reader.Die()
                                  dataManager.Die()                                
                                  workers |> Array.iter (fun w -> w.Die())
                                  match postprocessor with Some p -> p.Die() | None -> ()
  
negative.code:     let dataToProcess = new System.Collections.Concurrent.ConcurrentQueue<Option<'d>>()
      let dataToFill = new System.Collections.Generic.Queue<_>()
      let dataIsEnd = ref false
      let inner =
          MailboxProcessor.Start(fun inbox ->
              let rec loop n =
                  async { 
                          let cnt = ref 3
                          while dataToFill.Count > 0 && !cnt > 0 do
                              decr cnt                            
                              let b = dataToFill.Dequeue()
                              if not <| !dataIsEnd
                              then readers.[0].Read(b
                                  , fun a ->                                     
                                      dataToProcess.Enqueue a
  