'Send task by name.
Supports the same arguments as :meth:`@-Task.apply_async`.
Arguments:
name (str): Name of task to call (e.g., `"tasks.add"`).
result_cls (~@AsyncResult): Specify custom result class.'

def send_task(self, name, args=None, kwargs=None, countdown=None, eta=None, task_id=None, producer=None, connection=None, router=None, result_cls=None, expires=None, publisher=None, link=None, link_error=None, add_to_parent=True, group_id=None, retries=0, chord=None, reply_to=None, time_limit=None, soft_time_limit=None, root_id=None, parent_id=None, route_name=None, shadow=None, chain=None, task_type=None, **options):

    parent = have_parent = None
    amqp = self.amqp
    task_id = (task_id or uuid())
    producer = (producer or publisher)
    router = (router or amqp.router)
    conf = self.conf
    if conf.task_always_eager:
        warnings.warn(AlwaysEagerIgnored(u'task_always_eager    has    no    effect    on    send_task'), stacklevel=2)
    options = router.route(options, (route_name or name), args, kwargs, task_type)
    if ((not root_id) or (not parent_id)):
        parent = self.current_worker_task
        if parent:
            if (not root_id):
                root_id = (parent.request.root_id or parent.request.id)
            if (not parent_id):
                parent_id = parent.request.id
    message = amqp.create_task_message(task_id, name, args, kwargs, countdown, eta, group_id, expires, retries, chord, maybe_list(link), maybe_list(link_error), (reply_to or self.oid), time_limit, soft_time_limit, self.conf.task_send_sent_event, root_id, parent_id, shadow, chain)
    if connection:
        producer = amqp.Producer(connection, auto_declare=False)
    with self.producer_or_acquire(producer) as P:
        with P.connection._reraise_as_library_errors():
            self.backend.on_task_call(P, task_id)
            amqp.send_task_message(P, name, message, **options)
    result = (result_cls or self.AsyncResult)(task_id)
    if add_to_parent:
        if (not have_parent):
            (parent, have_parent) = (self.current_worker_task, True)
        if parent:
            parent.add_trail(result)
    return result
