<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def move_asynchronously(library, session, source_space, source_offset, source_width, destination_space, destination_offset, destination_width, length):
 """Moves a block of data asynchronously. Corresponds to viMoveAsync function of the VISA library. :param library: the visa library wrapped by ctypes. :param session: Unique logical identifier to a session. :param source_space: Specifies the address space of the source. :param source_offset: Offset of the starting address or register from which to read. :param source_width: Specifies the data width of the source. :param destination_space: Specifies the address space of the destination. :param destination_offset: Offset of the starting address or register to which to write. :param destination_width: Specifies the data width of the destination. :param length: Number of elements to transfer, where the data width of the elements to transfer is identical to the source data width. :return: Job identifier of this asynchronous move operation, return value of the library call. :rtype: jobid, :class:`pyvisa.constants.StatusCode` """

    job_id = ViJobId()
    ret = library.viMoveAsync(session, source_space, source_offset, source_width,
                              destination_space, destination_offset,
                              destination_width, length, byref(job_id))
    return job_id, ret