'Execute a task by name and wait results
**Example request**:
.. sourcecode:: http
POST /api/task/apply/tasks.add HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate, compress
Content-Length: 16
Content-Type: application/json; charset=utf-8
Host: localhost:5555
"args": [1, 2]
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Content-Length: 71
Content-Type: application/json; charset=UTF-8
"state": "SUCCESS",
"task-id": "c60be250-fe52-48df-befb-ac66174076e6",
"result": 3
:query args: a list of arguments
:query kwargs: a dictionary of arguments
:reqheader Authorization: optional OAuth token to authenticate
:statuscode 200: no error
:statuscode 401: unauthorized request
:statuscode 404: unknown task'

@web.authenticated
@web.asynchronous
def post(self, taskname):

    (args, kwargs, options) = self.get_task_args()
    logger.debug("Invoking    a    task    '%s'    with    '%s'    and    '%s'", taskname, args, kwargs)
    try:
        task = self.capp.tasks[taskname]
    except KeyError:
        raise HTTPError(404, ("Unknown    task    '%s'" % taskname))
    try:
        self.normalize_options(options)
    except ValueError:
        raise HTTPError(400, 'Invalid    option')
    result = task.apply_async(args=args, kwargs=kwargs, **options)
    response = {'task-id': result.task_id}
    th = Thread(target=self.wait_results, args=(result, response))
    th.start()
