> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# XAsyncBlock

> XAsyncBlock

# XAsyncBlock

表示异步调用的生存期。

## Syntax

```cpp theme={null}
typedef struct XAsyncBlock {  
    XTaskQueueHandle queue;  
    void* context;  
    XAsyncCompletionRoutine* callback;  
    unsigned internal[sizeof ( void* ) * 4];  
} XAsyncBlock  
```

### Members

*queue*\
类型：XTaskQueueHandle

可选。异步调用（以及可选的 *callback* 中指定的完成回调）的任务队列句柄。如果设置为 null，异步调用将尝试使用进程任务队列。如果进程任务队列也设置为 null，则异步调用将失败并返回 `E_NO_TASK_QUEUE`。

*context*\
类型：void\*

可选。指向传递给完成回调的信息的指针。

*callback*\
类型：[XAsyncCompletionRoutine\*](/reference/system/xasync/functions/xasynccompletionroutine)

调用完成时将调用的可选回调。

*internal*\
类型：unsigned char\[sizeof(void\*) \* 4]

保留供内部使用。

## Remarks

`XAsyncBlock` 结构表示异步调用的生存期。使用 `XAsyncBlock` 首先启动一个异步调用，并为该调用提供可选的完成回调。之后，可以使用 `XAsyncBlock` 作为该特定调用调用的句柄。启动异步调用时，它将被提交到任务队列以供执行。任务队列可用于确定哪个线程执行异步调用以及哪个线程（如果指定）调用完成回调。你不必创建任务队列即可调用异步调用。如果在 *queue* 中未指定任务队列，则默认使用进程任务队列。通常，进程任务队列将异步调用分派到系统线程池，完成回调会在启动异步调用的线程可提醒时在该线程上调用。有关任务队列分派模式的详细信息，请参阅[异步任务队列设计](/build/core-features/common/async/async-task-queue-design)。

<Note>启动异步调用后，不要修改该异步调用的 `XAsyncBlock` 中的任何参数。</Note>

### 完成回调

可以在 *callback* 中选择性地指定指向回调函数的指针，为异步调用提供*完成回调*。完成回调是在异步调用完成后执行的回调函数。可以通过在 *context* 中指定表示完成回调信息的指针，向完成回调提供特定于上下文的数据。

如果未在 *callback* 中指定完成回调，可以使用 [XAsyncGetStatus](/reference/system/xasync/functions/xasyncgetstatus) 函数定期检查异步调用是否已完成，然后根据需要使用 [XAsyncGetResult](/reference/system/xasyncprovider/functions/xasyncgetresult) 和 [XAsyncGetResultSize](/reference/system/xasync/functions/xasyncgetresultsize) 获取已完成任务的结果。

有关完成回调的详细信息，请参阅 [XAsyncCompletionRoutine](/reference/system/xasync/functions/xasynccompletionroutine)。

### 实现 XAsyncBlock

可以使用 [XAsyncProvider](/reference/system/xasyncprovider/xasyncprovider_members) 通过 `XAsyncBlock` 实现自己的异步功能，然后使用 [XTaskQueue](/reference/system/xtaskqueue/xtaskqueue_members) 函数调用该功能。也可以通过调用 [XAsyncRun](/reference/system/xasync/functions/xasyncrun) 来调用异步调用，这是一个帮助程序函数，它在内部使用 `XAsyncProvider` 运行和跟踪由另一个帮助程序函数 [XAsyncWork](/reference/system/xasync/functions/xasyncwork) 指定的回调函数。有关使用 `XAsyncProvider` 和 `XAsyncBlock` 实现自己的异步功能的详细信息，请参阅[异步编程模型](/build/core-features/common/async/async-programming-model)。

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

## Requirements

**头文件：** XAsync.h

**受支持的平台：** Windows、XBOX One 系列主机和 XBOX Series 主机

## Conceptual documentation

* [设置异步任务](/build/core-features/common/async/async-libraries/async-library-xasync-example-setup-async-task)
* [XAsync 库概述](/build/core-features/common/async/async-libraries/async-library-xasync)
* [XAsyncProvider 库概述](/build/core-features/common/async/async-libraries/async-library-xasyncprovider)
* [XTaskQueue 库概述](/build/core-features/common/async/async-libraries/async-library-xtaskqueue)
* [异步编程模型](/build/core-features/common/async/async-programming-model)
* [异步编程的设计目标和改进](/build/core-features/common/async/async-whitepaper)
* [发送邀请](/services/xbox-services/multiplayer/invites/how-to/live-invites-send)

## See also

[XAsync Members](/reference/system/xasync/xasync_members)\
[XAsyncProvider Members](/reference/system/xasyncprovider/xasyncprovider_members)\
[异步编程模型](/build/core-features/common/async/async-programming-model)


## Related topics

- [在 XSAPI C API 中进行异步调用](/zh-CN/services/xbox-services/fundamentals/xbox-services-api/live-flatc-async-patterns.md)
- [进行异步调用](/zh-CN/services/playfab/sdks/c/async.md)
- [PFGroupsBlockEntityAsync](/zh-CN/services/playfab/api-references/c/pfgroups/functions/pfgroupsblockentityasync.md)
- [PFGroupsListGroupBlocksAsync](/zh-CN/services/playfab/api-references/c/pfgroups/functions/pfgroupslistgroupblocksasync.md)
- [XAsyncCancel](/zh-CN/reference/system/xasync/functions/xasynccancel.md)
