> ## 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.

# XAsyncOp

> XAsyncOp

# XAsyncOp

表示异步提供程序的操作代码。

## Syntax

```cpp theme={null}
enum class XAsyncOp  : uint32_t  
{  
    Begin,  
    DoWork,  
    GetResult,  
    Cancel,  
    Cleanup  
}  
```

## Constants

| 常量        | 说明                                                                                                                                                                                                                                                                                                                                          |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Begin     | 当调用 [XAsyncBegin](/reference/system/xasyncprovider/functions/xasyncbegin) 时，会使用此操作代码调用异步提供程序。<br />如果实现了此操作代码，异步提供程序应通过调用 [XAsyncSchedule](/reference/system/xasyncprovider/functions/xasyncschedule) 或启动外部异步进程（例如重叠 I/O）来开始其异步工作。<br /> **注意** 为此操作代码执行的异步工作不得阻塞线程。                                                                        |
| DoWork    | 当调用 [XAsyncSchedule](/reference/system/xasyncprovider/functions/xasyncschedule) 以计划工作时，会使用此操作代码调用异步提供程序。<br />如果实现了此操作代码，异步提供程序应执行其异步工作，然后调用 [XAsyncComplete](/reference/system/xasyncprovider/functions/xasynccomplete)，并在 *requiredBufferSize* 中指定数据负载大小。如果还需要执行其他工作，异步提供程序可以对其进行计划，然后调用 `XAsyncComplete`，并在 *result* 中指定错误代码 E\_PENDING。 |
| GetResult | 在异步调用完成且用户需要获取生成的数据负载后，会使用此操作代码调用异步提供程序。<br />[XAsyncProviderData](/reference/system/xasyncprovider/structs/xasyncproviderdata) 的 *buffer* 和 *bufferSize* 字段的值已经过验证。                                                                                                                                                                        |
| Cancel    | 当应取消异步工作时，会使用此操作代码调用异步提供程序。<br />异步提供程序应取消所有异步工作，然后调用 [XAsyncComplete](/reference/system/xasyncprovider/functions/xasynccomplete)，并在 *result* 中指定错误代码 E\_ABORT。                                                                                                                                                                             |
| Cleanup   | 当异步调用完成或被取消并且可以清理上下文中的数据时，会使用此操作代码调用异步提供程序。                                                                                                                                                                                                                                                                                                 |

## Remarks

将重复调用异步提供程序的 [XAsyncProvider](/reference/system/xasyncprovider/functions/xasyncprovider) 回调函数，异步提供程序对每次调用应执行的操作由为每次调用指定的操作代码决定。`XAsyncOp` 表示异步提供程序可以实现的操作代码。\
异步提供程序应仅实现执行异步工作所需的 `XAsyncOp` 中的那些操作代码。例如，执行不需要清理的、不可取消的异步 I/O 工作的异步提供程序只需实现 `XAsyncOp::GetResult`。

有关实现 `XAsyncOp` 中 `DoWork`、`GetResult` 和 `Cleanup` 操作代码的异步提供程序示例，请参阅[异步编程模型](/build/core-features/common/async/async-programming-model#heading-7)中的"异步库"部分。

## Requirements

**头文件：** XAsyncProvider.h

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

## See also

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


## Related topics

- [XAsyncProvider function](/zh-CN/reference/system/xasyncprovider/functions/xasyncprovider.md)
- [AsyncProviderData](/zh-CN/reference/system/xasyncprovider/structs/xasyncproviderdata.md)
- [XAsyncProvider](/zh-CN/reference/system/xasyncprovider/xasyncprovider_members.md)
- [XAsyncBegin](/zh-CN/reference/system/xasyncprovider/functions/xasyncbegin.md)
- [XAsyncComplete](/zh-CN/reference/system/xasyncprovider/functions/xasynccomplete.md)
