async def METHOD_NAME(self):
    headers, buffers = await serialize_with_spawn(
        self._obj, spawn_threshold=DEFAULT_SPAWN_THRESHOLD
    )
    def _is_cuda_buffer(buf):  # pragma: no cover
        if cupy is not None and cudf is not None:
            from cudf.core.buffer import Buffer as CPBuffer
            from cupy import ndarray as cp_ndarray
        else:
            CPBuffer = cp_ndarray = None
        if CPBuffer is not None and isinstance(buf, CPBuffer):
            return True
        elif cp_ndarray is not None and isinstance(buf, cp_ndarray):
            return True
        else:
            return False
    is_cuda_buffers = [_is_cuda_buffer(buf) for buf in buffers]
    headers[0]["is_cuda_buffers"] = np.array(is_cuda_buffers)
    # add buffer lengths into headers
    headers[0][BUFFER_SIZES_NAME] = [
        buf.nbytes if hasattr(buf, "nbytes") else len(buf) for buf in buffers
    ]
    header = cloudpickle.dumps(headers)
    # gen header buffer
    header_bio = BytesIO()
    # write version first
    header_bio.write(struct.pack("B", DEFAULT_SERIALIZATION_VERSION))
    # write header length
    header_bio.write(struct.pack("<Q", len(header)))
    # write compression
    header_bio.write(struct.pack("<H", self._compress))
    # write header
    header_bio.write(header)
    out_buffers = list()
    out_buffers.append(header_bio.getbuffer())
    out_buffers.extend(buffers)
    return out_buffers