anchor.diff:  
       let cts = new CancellationTokenSource()
   
  -    let stateTableReadyEvent = new Event<string>()
  +    let stateTableReadyEvent     = new Event<string>()  // when the state able is confirmed to be ready
  +    let workerCountChangedEvent  = new Event<int>()     // when the number of workers have changed
   
       let kinesis    = AWSClientFactory.CreateAmazonKinesisClient(awsKey, awsSecret, region)
       let dynamoDB   = AWSClientFactory.CreateAmazonDynamoDBClient(awsKey, awsSecret, region)    
  
positive.code: 
              refreshSub.Dispose()
  
              workers.Keys 
              |> Seq.toArray 
              |> Seq.map (fun shardId -> stopWorker shardId)
              |> Async.Parallel
              |> Async.Ignore
              |> Async.RunSynchronously
  
              cts.Cancel()
              cts.Dispose()
  
negative.code: 
      let refreshSub = Observable.Interval(config.CheckStreamChangesFrequency)
                          .Subscribe(fun _ -> Async.Start(refresh, cts.Token))
      let _ = workerCountChangedEvent.Publish.Subscribe(fun n -> logDebug "Worker count changed to [{0}]" [| n |])
  
      let disposeInvoked = ref 0
      let cleanup (disposing : bool) =
          // ensure that resources are only disposed of once
  