class Concurrent::TimerTask

def ns_initialize(opts, &task)

def ns_initialize(opts, &task)
  set_deref_options(opts)
  self.execution_interval = opts[:execution] || opts[:execution_interval] || EXECUTION_INTERVAL
  if opts[:interval_type] && ![FIXED_DELAY, FIXED_RATE].include?(opts[:interval_type])
    raise ArgumentError.new('interval_type must be either :fixed_delay or :fixed_rate')
  end
  if opts[:timeout] || opts[:timeout_interval]
    warn 'TimeTask timeouts are now ignored as these were not able to be implemented correctly'
  end
  @run_now = opts[:now] || opts[:run_now]
  @interval_type = opts[:interval_type] || DEFAULT_INTERVAL_TYPE
  @task = Concurrent::SafeTaskExecutor.new(task)
  @executor = opts[:executor] || Concurrent.global_io_executor
  @running = Concurrent::AtomicBoolean.new(false)
  @value = nil
  self.observers = Collection::CopyOnNotifyObserverSet.new
end