Timer instead of background thread and ConcurrentQueue doesn't need locking