XAsyncBlock
表示异步调用的生存期。
语法
typedef struct XAsyncBlock {
XTaskQueueHandle queue;
void* context;
XAsyncCompletionRoutine* callback;
unsigned internal[sizeof ( void* ) * 4];
} XAsyncBlock
成员
queue
类型:XTaskQueueHandle
可选。 异步调用的任务队列的句柄,以及(可选)callback 中指定的完成回调。 如果设置为 null,异步调用将尝试使用进程任务队列。 如果进程任务队列也设置为 null,则异步调用将失败并返回 E_NO_TASK_QUEUE
。
context
类型:void*
可选。 指向传递到完成回调的信息的指针。
callback
类型:XAsyncCompletionRoutine*
调用完成后将调用的可选回调。
internal
类型:unsigned char[sizeof(void*) * 4]
保留供内部使用。
备注
XAsyncBlock
结构表示异步调用的生存期。 使用 XAsyncBlock
先调用异步调用,并为该调用提供可选的完成回调。 之后,可以使用 XAsyncBlock
作为该特定调用的调用的句柄。 调用异步调用时,系统会将该调用提交到任务队列等待执行。 任务队列可用于确定哪个线程执行异步调用,以及哪个线程调用完成回调(如果已指定)。 无需创建任务队列即可调用异步调用。 如果未在“队列”中指定任务队列,则默认使用进程任务队列。 通常情况下,进程任务队列将异步调用调度到系统线程池,完成回调将在启动异步调用的线程上进行调用(当该线程处于可警报状态时)。 有关任务队列的调度模式的详细信息,请参阅异步任务队列设计。
注意
调用异步调用后,不要修改该异步调用的 XAsyncBlock
中的任何参数。
完成回调
(可选)可指定指向 callback 中的回调函数的指针,以便为异步调用提供完成回调。 完成回调是异步调用完成后执行的回调函数。 通过在 context 中指定表示完成回调的信息的指针,向完成回调提供特定于上下文的数据。
如果未在 callback 中指定完成回调,则可以使用 XAsyncGetStatus 函数定期检查异步调用是否已完成,然后根据需要使用 XAsyncGetResult 和 XAsyncGetResultSize 获取已完成任务的结果。
有关完成回调的详细信息,请参阅 XAsyncCompletionRoutine。
实现 XAsyncBlock
可通过使用 XAsyncBlock
来使用 XAsyncProvider 实现自己的异步功能,然后通过使用 XTaskQueue 函数来调用该功能。 还可以通过调用 XAsyncRun 来调用异步调用;XAsyncRun 是一种帮助程序函数,以内部方式使用 XAsyncProvider
来运行和跟踪 XAsyncWork(另一种帮助程序函数)指定的回调函数。 有关使用 XAsyncProvider
和 XAsyncBlock
实现自己的异步功能的详细信息,请参阅异步编程模型。
在异步调用的生存期内,XAsyncBlock
必须保留在内存中。 但是,如果 XAsyncBlock
是动态分配的,则可以在异步调用的完成回调内安全地将它删除。
要求
头文件:XAsync.h
支持平台:Windows、Xbox One 系列主机和 Xbox Series 主机