anchor.diff:                             workers.Add(shardId, worker)
                              worker.OnStopped.Add(fun _ -> inbox.Post(RemoveWorker(shardId)))
                              reply.Reply()
  +                           workerCountChangedEvent.Trigger(workers.Count)
                   | StopWorker(shardId, reply) -> 
                       match workers.TryGetValue(shardId) with
                       | true, worker -> 
  -                        async {
  -                            worker.Stop()
  -                            reply.Reply()
  -                        }
  -                        |> Async.Start
  -                        
  +                        worker.Stop()
  +                        reply.Reply()
                       | _ -> reply.Reply()
  -                | RemoveWorker(shardId) -> workers.Remove(shardId) |> ignore
  +                | RemoveWorker(shardId) -> 
  +                    workers.Remove(shardId) |> ignore
  +                    workerCountChangedEvent.Trigger(workers.Count)
                   | AddKnownShard(shardId, reply) ->
                       if not <| knownShards.ContainsKey(shardId) then knownShards.Add(shardId, false)
                       reply.Reply()
  
positive.code: 
      let cts = new CancellationTokenSource()
  
      let stateTableReadyEvent = new Event<string>()
  
      let kinesis    = AWSClientFactory.CreateAmazonKinesisClient(awsKey, awsSecret, region)
      let dynamoDB   = AWSClientFactory.CreateAmazonDynamoDBClient(awsKey, awsSecret, region)    
  
negative.code: 
              refreshSub.Dispose()
  
              if workers.Count > 0 then
                  logDebug "Stopping all [{0}] workers..." [| workers.Count |]
  
                  workers.Keys 
                  |> Seq.toArray 
                  |> Seq.map (fun shardId -> stopWorker shardId)
                  |> Async.Parallel
                  |> Async.Ignore
                  |> Async.Start
                  
                  workerCountChangedEvent.Publish.Where(fun n -> n = 0).Take(1).Wait() |> ignore
  
                  logDebug "Workers stopped..." [||]
  
              cts.Cancel()
              cts.Dispose()
  