XAsyncBlock
表示异步调用的生存期。Syntax
Members
queue类型:XTaskQueueHandle 可选。异步调用(以及可选的 callback 中指定的完成回调)的任务队列句柄。如果设置为 null,异步调用将尝试使用进程任务队列。如果进程任务队列也设置为 null,则异步调用将失败并返回
E_NO_TASK_QUEUE。
context类型:void* 可选。指向传递给完成回调的信息的指针。 callback
类型:XAsyncCompletionRoutine* 调用完成时将调用的可选回调。 internal
类型:unsigned char[sizeof(void*) * 4] 保留供内部使用。
Remarks
XAsyncBlock 结构表示异步调用的生存期。使用 XAsyncBlock 首先启动一个异步调用,并为该调用提供可选的完成回调。之后,可以使用 XAsyncBlock 作为该特定调用调用的句柄。启动异步调用时,它将被提交到任务队列以供执行。任务队列可用于确定哪个线程执行异步调用以及哪个线程(如果指定)调用完成回调。你不必创建任务队列即可调用异步调用。如果在 queue 中未指定任务队列,则默认使用进程任务队列。通常,进程任务队列将异步调用分派到系统线程池,完成回调会在启动异步调用的线程可提醒时在该线程上调用。有关任务队列分派模式的详细信息,请参阅异步任务队列设计。
启动异步调用后,不要修改该异步调用的
XAsyncBlock 中的任何参数。完成回调
可以在 callback 中选择性地指定指向回调函数的指针,为异步调用提供完成回调。完成回调是在异步调用完成后执行的回调函数。可以通过在 context 中指定表示完成回调信息的指针,向完成回调提供特定于上下文的数据。 如果未在 callback 中指定完成回调,可以使用 XAsyncGetStatus 函数定期检查异步调用是否已完成,然后根据需要使用 XAsyncGetResult 和 XAsyncGetResultSize 获取已完成任务的结果。 有关完成回调的详细信息,请参阅 XAsyncCompletionRoutine。实现 XAsyncBlock
可以使用 XAsyncProvider 通过XAsyncBlock 实现自己的异步功能,然后使用 XTaskQueue 函数调用该功能。也可以通过调用 XAsyncRun 来调用异步调用,这是一个帮助程序函数,它在内部使用 XAsyncProvider 运行和跟踪由另一个帮助程序函数 XAsyncWork 指定的回调函数。有关使用 XAsyncProvider 和 XAsyncBlock 实现自己的异步功能的详细信息,请参阅异步编程模型。
在异步调用的整个生存期内,XAsyncBlock 必须保留在内存中。但是,如果 XAsyncBlock 是动态分配的,则可以在异步调用的完成回调内安全删除它。
Requirements
头文件: XAsync.h 受支持的平台: Windows、XBOX One 系列主机和 XBOX Series 主机Conceptual documentation
See also
XAsync MembersXAsyncProvider Members
异步编程模型
