def METHOD_NAME(self, when, callback, *args, **kwargs):
    # asyncio.call_at supports *args but not **kwargs, so bind them here.
    # We do not synchronize self.time and asyncio_loop.time, so
    # convert from absolute to relative.
    return self.asyncio_loop.call_later(
        max(0, when - self.time()), self._run_callback,
        functools.partial(stack_context.wrap(callback), *args, **kwargs))