     @emitted = false
     @search = null
     @is_async = false
+    @cycle = {}
     Worker.clear_callback?.apply this
 
   # If the caught error is from a `@for_reals`, then try to resolve

      @workers[key]?.resume()
    @resume.subscribe _('resume').namespace(@options.db_index)

    @control.on 'message', (channel, action) => @perform action
    @control.subscribe _('control').namespace(@options.db_index)
  
  # React to a control message sent by the dispatcher
  perform: (action) ->
    switch action
      when 'quit' then @quit()
      when 'reset' then @reset()
  
  # Run the work queue, calling the given callback on completion
  run: (@callback) ->

    if @sticky[key]
      @sticky[key]
    else if @stage < @last_stage
      value = @build @cache[key], opts.as
      @sticky[key] = value if opts.sticky
      value
    else if @cycle[key]
      @cycle[key] = false
      throw new CycleError
    else
      @deps.push key
      @blank()
