def _prepare(self, kwargs=None):
        """
        Updates the function arguments and creates a :class:`asyncio.Task`
        from the Action.

        *kwargs* is an optional dictionnary of additional arguments to pass to
        the Action function.

        .. warning::
            *kwargs* will overwrite existing keys in *self.args*.

        .. note::
            If the Action func is blocking (not a coroutine function), it will
            be executed in an `Executor`_.

        .. _Executor: https://docs.python.org/3/library/asyncio-eventloop.html#executor
        """
        if kwargs is not None:
            # Note: This will overwrite existing keys in self.args.
            #       This is the wanted behavior.
            self.args.update(kwargs)

        if asyncio.iscoroutinefunction(self.func):
            task = asyncio.ensure_future(self.func(**self.args))
        else:
            # FIXME: is that clean enough ?
            task = asyncio.get_event_loop() \
                   .run_in_executor(None,
                                    functools.partial(self.func,
                                                      **self.args))

        return task