async def call(proxy, method_name, signature, args, flags=0, timeout_msec=-1):
    """
    Asynchronously call the specified method on a DBus proxy object.

    :param Gio.DBusProxy proxy:
    :param str method_name:
    :param str signature:
    :param tuple args:
    :param int flags:
    :param int timeout_msec:
    """
    future = Future()
    cancellable = None
    proxy.call(
        method_name,
        GLib.Variant(signature, tuple(args)),
        flags,
        timeout_msec,
        cancellable,
        gio_callback,
        future,
    )
    result = await future
    value = proxy.call_finish(result)
    return pack(*unpack_variant(value))