> ## Documentation Index
> Fetch the complete documentation index at: https://docs.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](https://docs.xbox.com/ja-jp/reference/system/xasyncprovider/functions/xasyncbegin.md) が呼び出されると、非同期プロバイダーがこの操作コードで呼び出されます。 この操作コードが実装されている場合、非同期プロバイダーは、[XAsyncSchedule](https://docs.xbox.com/ja-jp/reference/system/xasyncprovider/functions/xasyncschedule.md) を呼び出すか、オーバーラップ I/O などの外部の非同期プロセスを開始することにより、非同期作業を開始する必要があります。  **注** この操作コードに対して実行される非同期作業は、スレッドをブロックしてはなりません。 |
| DoWork | 作業をスケジュールするために [XAsyncSchedule](https://docs.xbox.com/ja-jp/reference/system/xasyncprovider/functions/xasyncschedule.md) が呼び出されると、非同期プロバイダーがこの操作コードで呼び出されます。 この操作コードが実装されている場合、非同期プロバイダーは非同期作業を実行し、次に [XAsyncComplete](https://docs.xbox.com/ja-jp/reference/system/xasyncprovider/functions/xasynccomplete.md) を呼び出して、*requiredBufferSize* にデータ ペイロードのサイズを指定する必要があります。追加の作業を行う必要がある場合、非同期プロバイダーはそれをスケジュールし、次に `XAsyncComplete` を呼び出して、*result* にエラー コード E\_PENDING を指定できます。 |
| GetResult | 非同期呼び出しが完了し、ユーザーが結果のデータ ペイロードを取得する必要があるときに、非同期プロバイダーがこの操作コードで呼び出されます。 [XAsyncProviderData](https://docs.xbox.com/ja-jp/reference/system/xasyncprovider/structs/xasyncproviderdata.md) の *buffer* および *bufferSize* フィールドの値は検証されています。 |
| Cancel | 非同期作業をキャンセルする必要があるときに、非同期プロバイダーがこの操作コードで呼び出されます。 非同期プロバイダーはすべての非同期作業をキャンセルし、次に [XAsyncComplete](https://docs.xbox.com/ja-jp/reference/system/xasyncprovider/functions/xasynccomplete.md) を呼び出して、*result* にエラー コード E\_ABORT を指定する必要があります。 |
| Cleanup | 非同期呼び出しが完了またはキャンセルされ、コンテキスト内のデータをクリーンアップできるときに、非同期プロバイダーがこの操作コードで呼び出されます。 |

## Remarks

非同期プロバイダー用の [XAsyncProvider](https://docs.xbox.com/ja-jp/reference/system/xasyncprovider/functions/xasyncprovider.md) コールバック関数は繰り返し呼び出されます。各呼び出しで指定された操作コードによって、その非同期プロバイダーが各呼び出しで何をするべきかが決まります。`XAsyncOp` は、非同期プロバイダーが実装できる操作コードを表します。\
非同期プロバイダーは、非同期作業の実行に必要な `XAsyncOp` からの操作コードのみを実装する必要があります。たとえば、クリーンアップを必要としないキャンセル不可の非同期 I/O 作業を実行する非同期プロバイダーは、`XAsyncOp::GetResult` を実装するだけで済みます。

`XAsyncOp` から `DoWork`、`GetResult`、および `Cleanup` の操作コードを実装する非同期プロバイダーの例については、[Asynchronous Programming Model](https://docs.xbox.com/ja-jp/build/core-features/common/async/async-programming-model.md#heading-7) の "Async Library" セクションを参照してください。

## Requirements

**ヘッダー:** XAsyncProvider.h

**サポートされているプラットフォーム:** Windows、XBOX One ファミリー本体および XBOX Series 本体

## See also

[XAsyncProviderData](https://docs.xbox.com/ja-jp/reference/system/xasyncprovider/structs/xasyncproviderdata.md)\
[XAsyncProvider Members](https://docs.xbox.com/ja-jp/reference/system/xasyncprovider/xasyncprovider_members.md)\
[Asynchronous Programming Model](https://docs.xbox.com/ja-jp/build/core-features/common/async/async-programming-model.md)


## Related topics

- [XAsyncProvider](https://docs.xbox.com/ja-jp/reference/system/xasyncprovider/functions/xasyncprovider.md)
- [XAsyncProviderData](https://docs.xbox.com/ja-jp/reference/system/xasyncprovider/structs/xasyncproviderdata.md)
- [XAsyncProvider (API の内容)](https://docs.xbox.com/ja-jp/reference/system/xasyncprovider/xasyncprovider_members.md)
- [XAsyncBegin](https://docs.xbox.com/ja-jp/reference/system/xasyncprovider/functions/xasyncbegin.md)
- [XAsyncComplete](https://docs.xbox.com/ja-jp/reference/system/xasyncprovider/functions/xasynccomplete.md)
