> ## 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` の操作コードを実装する非同期プロバイダーの例については、[Asynchronous Programming Model](/build/core-features/common/async/async-programming-model#heading-7) の "Async Library" セクションを参照してください。

## Requirements

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

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

## See also

[XAsyncProviderData](/reference/system/xasyncprovider/structs/xasyncproviderdata)\
[XAsyncProvider Members](/reference/system/xasyncprovider/xasyncprovider_members)\
[Asynchronous Programming Model](/build/core-features/common/async/async-programming-model)


## Related topics

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