<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def start(self, transactional=False, async=False, rpc=None):
 """Insert the task into the requested queue, 'default' if non given. If a TransientError is hit the task will re-insert the task. If a TaskAlreadyExistsError or TombstonedTaskError is hit the task will silently fail. If the async flag is set, then the add will be done asynchronously and the return value will be the rpc object; otherwise the return value is the task itself. If the rpc kwarg is provided, but we're not in async mode, then it is ignored. """

        from google.appengine.api import taskqueue

        task = self.to_task()
        queue = taskqueue.Queue(name=self.get_queue())
        retry_transient = self._options.get('retry_transient_errors', True)
        retry_delay = self._options.get('retry_delay', RETRY_SLEEP_SECS)

        add = queue.add
        if async:
            add = partial(queue.add_async, rpc=rpc)

        try:
            ret = add(task, transactional=transactional)
        except taskqueue.TransientError:
            # Always re-raise for transactional insert, or if specified by
            # options.
            if transactional or not retry_transient:
                raise

            time.sleep(retry_delay)

            ret = add(task, transactional=transactional)
        except (taskqueue.TaskAlreadyExistsError,
                taskqueue.TombstonedTaskError):
            return

        # TODO: Return a "result" object.
        return ret