> ## 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* にタスク キューが指定されていない場合、既定でプロセスのタスク キューが使用されます。通常、プロセスのタスク キューは非同期呼び出しをシステムのスレッド プールにディスパッチし、非同期呼び出しを開始したスレッドがアラート可能な状態のときに、そのスレッドで完了コールバックが呼び出されます。タスク キューのディスパッチ モードの詳細については、[Async Task Queue Design](/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` を使用して独自の非同期機能を実装する方法の詳細については、[Asynchronous Programming Model](/build/core-features/common/async/async-programming-model) を参照してください。

`XAsyncBlock` は、非同期呼び出しのライフタイムの間、メモリに残る必要があります。ただし、`XAsyncBlock` が動的に割り当てられている場合は、非同期呼び出しの完了コールバック内で安全に削除できます。

## Requirements

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

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

## Conceptual documentation

* [Set up async task](/build/core-features/common/async/async-libraries/async-library-xasync-example-setup-async-task)
* [XAsync library overview](/build/core-features/common/async/async-libraries/async-library-xasync)
* [XAsyncProvider library overview](/build/core-features/common/async/async-libraries/async-library-xasyncprovider)
* [XTaskQueue library overview](/build/core-features/common/async/async-libraries/async-library-xtaskqueue)
* [Asynchronous Programming Model](/build/core-features/common/async/async-programming-model)
* [Asynchronous programming design goals and improvements](/build/core-features/common/async/async-whitepaper)
* [Sending invites](/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)\
[Asynchronous Programming Model](/build/core-features/common/async/async-programming-model)


## Related topics

- [XSAPI C API で非同期呼び出しを行う](/ja-jp/services/xbox-services/fundamentals/xbox-services-api/live-flatc-async-patterns.md)
- [PFGroupsBlockEntityAsync](/ja-jp/services/playfab/api-references/c/pfgroups/functions/pfgroupsblockentityasync.md)
- [PFGroupsListGroupBlocksAsync](/ja-jp/services/playfab/api-references/c/pfgroups/functions/pfgroupslistgroupblocksasync.md)
- [XAsyncCancel](/ja-jp/reference/system/xasync/functions/xasynccancel.md)
- [XAsyncWork](/ja-jp/reference/system/xasync/functions/xasyncwork.md)
