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 函数定期检查异步调用是否已完成,然后根据需要使用 XAsyncGetResultXAsyncGetResultSize 获取已完成任务的结果。

有关完成回调的详细信息,请参阅 XAsyncCompletionRoutine

实现 XAsyncBlock

可通过使用 XAsyncBlock 来使用 XAsyncProvider 实现自己的异步功能,然后通过使用 XTaskQueue 函数来调用该功能。 还可以通过调用 XAsyncRun 来调用异步调用;XAsyncRun 是一种帮助程序函数,以内部方式使用 XAsyncProvider 来运行和跟踪 XAsyncWork(另一种帮助程序函数)指定的回调函数。 有关使用 XAsyncProviderXAsyncBlock 实现自己的异步功能的详细信息,请参阅异步编程模型

在异步调用的生存期内,XAsyncBlock 必须保留在内存中。 但是,如果 XAsyncBlock 是动态分配的,则可以在异步调用的完成回调内安全地将它删除。

要求

头文件:XAsync.h

支持平台:Windows、Xbox One 系列主机和 Xbox Series 主机

另请参阅

XAsync 成员
XAsyncProvider 成员
异步编程模型