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

# 非同步程式設計的設計目標與改進

> 非同步程式設計的設計目標與改進

本主題說明為 Microsoft Game Development Kit (GDK) 建立新的非同步程式設計模型時所訂定的設計目標。本主題也說明為回應開發人員的意見反應，相較於 XBOX One Software Development Kit 模型所做的改進。

## 本主題內容

* [簡介](#introduction)
* [設計目標](#design_goals)
  * [一致且跨平台](#consistent_cross_platform)
  * [開發人員完全掌控](#complete_developer_control)
  * [任何執行緒處理情況](#any_threading_situation)
* [相較於 XBOX One Software Development Kit 的改進](#improvements_from_xdk)
  * [不再使用 C++/CLI](#no_more_ccli_winrt)
  * [完全掌控執行緒處理行為](#complete_control_of_threading_behavior)
  * [以錯誤碼取代例外狀況](#error_codes_instead_of_exceptions)
  * [沒有記憶體回收](#no_garbage_collection)
  * [保證高效能](#guaranteed_high_performance)
    * [時間敏感執行緒](#time_sensitive_threads)
  * [Microsoft Game Development Kit (GDK) API 呼叫以外的泛型用法](#generic_usage_beyond_gdk_api_calls)

<a id="introduction" />

## 簡介

Microsoft Game Development Kit (GDK) 引進了新的非同步
程式設計模型，旨在為您提供高度
可自訂且可控制的執行行為，同時具有低
處理和記憶體額外負荷。Microsoft Game Development Kit (GDK) 中的所有非同步 API 呼叫都使用
此模型以提供一致性。不過，非同步程式庫
也可以直接用於您自己的工作和非同步系統中，以管理
工作的排入佇列和分派。

Microsoft Game Development Kit (GDK) 中的新解決方案借鏡先前的 XBOX One Software Development Kit 非同步模型及
開發人員意見反應，讓
您能夠完全掌控非同步工作的執行方式和執行位置。
您可以使用任何執行緒設計，無論是在
單一執行緒上同步執行，或是在具有高度
特定優先順序和親和性遮罩的遊戲執行緒上平行執行。XBOX One Software Development Kit 只使用
系統執行緒集區。

Microsoft Game Development Kit (GDK) 的典範轉移透過使用 Win32 樣式的一般 C 或簡單 C++ API，改進了原本的 XBOX One Software Development Kit 解決方案。如此一來，您可以直接
管理記憶體配置和解除配置的時機。效能可以
更容易檢查，而且大部分 API 呼叫 (以及用於工作執行的所有非同步程式庫
API 呼叫) 都具有[高效能
保證](#guaranteed_high_performance)。

<a id="design_goals" />

## 設計目標

非同步程式庫在設計時訂定了一些關鍵目標，以確保
遊戲能在 API 或系統的額外負荷最小的情況下獲得最佳效能。
下列清單包含一些高階目標。

* 非同步程式碼一致，且容易理解和識別。
* 您可以自由地完全管理回呼執行行為。
* 您可以隨心所欲地使用執行緒。
* 效能和記憶體使用量一致且容易管理。
* 執行工作的系統額外負荷低，可在主要執行緒上使用。
* 非同步程式庫不應僅限於 Microsoft Game Development Kit (GDK) API 使用。

其中部分目標會在下列子章節中說明，其他目標
則在本主題的[相較於 XBOX One Software Development Kit 的改進](#improvements_from_xdk)
一節中說明。

<a id="consistent_cross_platform" />

### 一致且跨平台

一致性讓您對非同步 API 的撰寫方式
和運作方式有下列預期。

* 方法和資料會加上 `X` 前置詞，後面接著程式庫名稱。
* [一般錯誤會透過 HRESULT 錯誤碼回報](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/overviews/error-handling)。
* Microsoft Game Development Kit (GDK) 中的所有非同步呼叫都使用 [XAsyncBlock](/zh-TW/reference/system/xasync/structs/xasyncblock)。
* 非同步 Microsoft Game Development Kit (GDK) 起始方法會加上 `Async` 後置詞。
* 非同步 Microsoft Game Development Kit (GDK) 結果方法會加上 `Result` 後置詞。

跨平台表示相同的非同步 API 呼叫可以
在 Microsoft Game Development Kit (GDK) 所鎖定的任何平台上使用。這些平台目前
包括 [Windows PC (NDA 主題)](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/intro/introduction#shipping-a-game-on-Windows-PCs)、[XBOX One 系列主機和 XBOX Series 主機 (NDA 主題)](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/intro/introduction#Shipping-a-game-on-Xbox-consoles)。

無論您是將非同步程式庫用於 Microsoft Game Development Kit (GDK) API 呼叫，或用於您自己的
功能，[設定
XAsyncBlock](/zh-TW/build/core-features/common/async/async-libraries/async-library-xasync-example-setup-async-task) 和[啟動
非同步方法](/zh-TW/build/core-features/common/async/async-libraries/async-library-xasync-example-run-simple-task)的流程始終相同。每當程式庫提供非同步
方法時，這些方法都會使用非同步
程式庫來實作。下表列出一些
公開非同步方法的程式庫。

| 程式庫 | 非同步用途 | 範例方法 |
| - | - | - |
| [XUser](/zh-TW/reference/system/xuser/xuser_members) | 管理 XBOX services 使用者 | [XUserAddAsync](/zh-TW/reference/system/xuser/functions/xuseraddasync),<br />[XUserAddResult](/zh-TW/reference/system/xuser/functions/xuseraddresult),<br />[XUserGetGamerPictureAsync](/zh-TW/reference/system/xuser/functions/xusergetgamerpictureasync),<br />[XUserGetGamerPictureResult](/zh-TW/reference/system/xuser/functions/xusergetgamerpictureresult) |
| [XGameSave](/zh-TW/reference/system/xgamesave/xgamesave_members) | 讀取、寫入及管理遊戲存檔 | [XGameSaveInitializeProviderAsync](/zh-TW/reference/system/xgamesave/functions/xgamesaveinitializeproviderasync),<br />[XGameSaveInitializeProviderResult](/zh-TW/reference/system/xgamesave/functions/xgamesaveinitializeproviderresult),<br />[XGameSaveSubmitUpdateAsync](/zh-TW/reference/system/xgamesave/functions/xgamesavesubmitupdateasync),<br />[XGameSaveSubmitUpdateResult](/zh-TW/reference/system/xgamesave/functions/xgamesavesubmitupdateresult) |
| [XPackage](/zh-TW/reference/system/xpackage/xpackage_members) | 觀察及管理遊戲安裝 | [XPackageInstallChunksAsync](/zh-TW/reference/system/xpackage/functions/xpackageinstallchunksasync),<br />[XPackageInstallChunksResult](/zh-TW/reference/system/xpackage/functions/xpackageinstallchunksresult) |
| [XGameUI](/zh-TW/reference/system/xgameui/xgameui_members) | 使用系統對話方塊及其他殼層 UI | [XGameUiShowMessageDialogAsync](/zh-TW/reference/system/xgameui/functions/xgameuishowmessagedialogasync),<br />[XGameUiShowMessageDialogResult](/zh-TW/reference/system/xgameui/functions/xgameuishowmessagedialogresult),<br />[XGameUiShowSendGameInviteAsync](/zh-TW/reference/system/xgameui/functions/xgameuishowsendgameinviteasync),<br />[XGameUiShowSendGameInviteResult](/zh-TW/reference/system/xgameui/functions/xgameuishowsendgameinviteresult) |

<a id="complete_developer_control" />

### 開發人員完全掌控

新非同步程式庫的一個重要部分，是您
擁有完全的掌控權，能為遊戲達成最佳的
使用方式。這表示模型的許多部分都
可以自訂，包括下列項目。

* 工作佇列中的回呼可以自動或手動分派。
* 完成回呼是選擇性的，也可以使用輪詢。
* 預設處理序工作佇列可以[變更或移除](/zh-TW/reference/system/xtaskqueue/functions/xtaskqueuesetcurrentprocesstaskqueue)。
* 可以實作[自訂非同步提供者](/zh-TW/build/core-features/common/async/async-libraries/async-library-xasyncprovider-example-setup-custom-provider)來變更[工作管理流程](/zh-TW/build/core-features/common/async/async-libraries/async-library-xasyncprovider)。

在[建立](/zh-TW/reference/system/xtaskqueue/functions/xtaskqueuecreate)工作佇列時，您可以[自訂](/zh-TW/reference/system/xtaskqueue/enums/xtaskqueuedispatchmode)兩個連接埠的回呼分派方式，如下表所示。

| 連接埠模式 | 行為 |
| - | - |
| `ThreadPool` | 排入佇列的回呼會在背景中於系統集區執行緒上自動且並行地分派。 |
| `SerializedThreadPool` | 排入佇列的回呼會在背景中於系統集區執行緒上自動分派。不過，一次只能有一個回呼處於作用中狀態，以確保依序執行而不重疊。 |
| `Immediate` | 嘗試排入佇列時，回呼會立即在呼叫端的堆疊框架中執行，而不是將回呼排入佇列供稍後執行。如果工作連接埠為 `Immediate`，則會在啟動非同步呼叫時執行工作回呼。如果完成連接埠為 `Immediate`，則會在工作回呼完成後，於相同的堆疊框架中執行完成回呼。 |
| `Manual` | 排入此模式連接埠的任何回呼都不會自動分派。您必須呼叫 [XTaskQueueDispatch](/zh-TW/reference/system/xtaskqueue/functions/xtaskqueuedispatch)，以手動執行連接埠上的回呼。呼叫模式會決定回呼的執行緒處理和並行程度。 |

您可以使用 [XTaskQueueSetCurrentProcessTaskQueue](/zh-TW/reference/system/xtaskqueue/functions/xtaskqueuesetcurrentprocesstaskqueue)，取代未指定工作
佇列時遊戲所使用的預設工作佇列。
如果您想要確保一律指定工作佇列，
也可以搭配 `nullptr` 使用該函式來移除預設佇列。
這樣做時，如果未指定工作佇列，
就會產生錯誤。

如果您偏好對非同步呼叫使用輪詢，以得知
工作何時完成，可以使用 [XAsyncGetStatus](/zh-TW/reference/system/xasync/functions/xasyncgetstatus) 來檢查傳回
碼。

<a id="any_threading_situation" />

### 任何執行緒處理情況

當工作佇列連接埠設定為使用手動分派時，
連接埠的分派時機或方式沒有任何限制。非同步
程式庫的實作是安全執行緒的，因此自訂的
執行緒處理和並行行為不需要鎖定就能進行。
關鍵區段、連鎖作業及其他相關的
多執行緒建構只需用於保護回呼中使用的
使用者資料，而不是非同步系統。

使用您自己的執行緒時，您可以根據實作情況的需要，自由設定親和性遮罩和
執行緒優先順序。您也
可以使用 Windows 訊息迴圈來處理分派。
手動連接埠中的工作回呼執行行為，完全
取決於您的執行緒如何設定為呼叫
[XTaskQueueDispatch](/zh-TW/reference/system/xtaskqueue/functions/xtaskqueuedispatch)，如圖 1 和圖 2 所示。

**圖 1. 顯示單一執行緒的回呼執行行為**

<img src="https://mintcdn.com/microsoft-4404708b/sIrPFR_ir_sNKVEv/images/gdk/features/common/async_port_dispatch_singlethread.png?fit=max&auto=format&n=sIrPFR_ir_sNKVEv&q=85&s=bceacfdac6d7a8a6bd58641ac4c604c0" alt="單一執行緒回呼執行行為的螢幕擷取畫面" width="588" height="230" data-path="images/gdk/features/common/async_port_dispatch_singlethread.png" />

**圖 2. 顯示多個執行緒的回呼執行行為**

<img src="https://mintcdn.com/microsoft-4404708b/sIrPFR_ir_sNKVEv/images/gdk/features/common/async_port_dispatch_multithread.png?fit=max&auto=format&n=sIrPFR_ir_sNKVEv&q=85&s=697aae48e97cb3aa23845108060a1882" alt="多個執行緒回呼執行行為的螢幕擷取畫面" width="628" height="230" data-path="images/gdk/features/common/async_port_dispatch_multithread.png" />

<a id="improvements_from_xdk" />

## 相較於 XBOX One Software Development Kit 的改進

[回應您的意見反應並改進過去的解決方案，對
Microsoft Game Development Kit (GDK) 來說非常重要 (NDA 主題)](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/intro/introduction)。下列
子章節列出與 XBOX One Software Development Kit 中的
非同步程式設計相比所做的一些重要改進。

<a id="no_more_ccli_winrt" />

### 不再使用 C++/CLI (WinRT)

XBOX One Software Development Kit 需要使用 C++/CLI (WinRT) 來實現非同步函式
行為。如此一來，系統就能管理其對 XBOX services 和
其他服務的呼叫，而不會遇到資源流失和錯誤等問題。不過，這也需要
學習新的程式碼撰寫語法，並考量系統隱含的時間
配量和資源使用量。

[Microsoft Game Development Kit (GDK) 非同步模型](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/intro/introduction#microsoft-game-development-kit-gdk-async-model)將非同步程式庫的典範轉換為 Win32 樣式的 C 樣式 API 模型。Microsoft Game Development Kit (GDK) 程式碼可以
直接在 C/C++ 專案中使用，而不需要整合受控
WinRT 生態系統。因此，所有配置和行為都是隔離的
且易於理解，在系統執行緒上只有極少的背景行為。

<a id="complete_control_of_threading_behavior" />

### 完全掌控執行緒處理行為

XBOX One Software Development Kit 處理非同步呼叫的方式只有一種，就是
在系統集區執行緒上並行執行。可控制的範圍
僅限於調整系統執行緒集區。

在 Microsoft Game Development Kit (GDK) 中，執行緒處理可以如 XBOX One Software Development Kit 所述使用系統執行緒集區，也可以
透過手動執行緒處理進行自訂，為
應用程式建置所需的行為。使用手動執行緒處理時，回呼執行行為
取決於 [XTaskQueueDispatch](/zh-TW/reference/system/xtaskqueue/functions/xtaskqueuedispatch) 的
呼叫方式和時機。如果只在一個執行緒上呼叫此函式，則行為
就會變成在該執行緒上同步執行。如果有數個執行緒同時呼叫此
函式，每個呼叫都會從工作佇列取得不同的回呼，
並平行執行它們。

本主題的[開發人員完全掌控](#complete_developer_control)一節已說明不同的回呼執行行為。

<a id="error_codes_instead_of_exceptions" />

### 以錯誤碼取代例外狀況

Microsoft Game Development Kit (GDK) 涵蓋許多新舊技術。因此，
錯誤處理可能因程式庫而異。非同步
程式庫設計為「無例外狀況」。這表示
例外狀況不會用於呼叫錯誤、流程控制、狀態回報，
或任何其他執行階段用途。您可以在遊戲中使用您自己的
例外狀況處理。

大部分錯誤和狀態碼現在都以標準 Win32 程式碼撰寫樣式，透過 `HRESULT` 碼
回報。當結果狀態碼不
重要時，可能會使用布林值。當 API 方法預期會
產生常見錯誤時，這些錯誤會列在文件中，
並說明其原因。

由於使用 `HRESULT` 碼，檢查代碼的簡單模式是
使用 Windows `SUCCESS()` 和 `FAILED()` 巨集。檢查
特定錯誤碼以決定如何繼續時，您可以檢查 `HRESULT` 值。

如需 Microsoft Game Development Kit (GDK) 中錯誤處理的詳細資訊，請參閱 [Microsoft Game Development Kit 中的錯誤處理](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/overviews/error-handling)。

<a id="no_garbage_collection" />

### 沒有記憶體回收

由於 Microsoft Game Development Kit (GDK) 不支援 C++/CLI (WinRT)，這也表示
執行階段期間不會在背景中進行任何記憶體回收。
所有追蹤的 OS 配置都以直接 `HANDLE`
物件或程式庫所提供的自訂控制代碼 [typedef](https://learn.microsoft.com/cpp/c-language/typedef-declarations?view=msvc-160) 表示。

您可以使用控制代碼，將配置/解除配置的時機、行為和效能設定為由呼叫端管理。這些配置和
解除配置可以移至支援的載入器執行緒，
以避免效能停頓。在效能至關重要時，解除配置不會
意外發生。

不過，資源追蹤和避免記憶體流失
就成了您的責任。請確保任何已配置的
控制代碼在不再需要時都會解除配置。

<a id="guaranteed_high_performance" />

### 保證高效能

XBOX One Software Development Kit 非同步模型因使用受控 COM 架構，
容易出現意外的記憶體和效能停頓，而且
有時很難掌握。不過，Microsoft Game Development Kit (GDK) 模型可確保
一致的效能和記憶體使用量。

由於可以控制執行緒處理，系統呼叫的效能
更容易使用分析工具或自訂程式碼來檢查。ATG
非同步程式設計範例內建了測試，可測量部分花費的時間。圖 3 中的圖表測量使用自訂非同步提供者管理
非同步工作所花費的時間。測試所使用的自訂執行緒
會盡快執行回呼。

**圖 3. 顯示測量非同步系統額外負荷的圖表**

<img src="https://mintcdn.com/microsoft-4404708b/sIrPFR_ir_sNKVEv/images/gdk/features/common/async_system_overhead.png?fit=max&auto=format&n=sIrPFR_ir_sNKVEv&q=85&s=f3b502ebab1ac4271107b2bbc70c390c" alt="測量非同步系統額外負荷的圖表螢幕擷取畫面" width="975" height="527" data-path="images/gdk/features/common/async_system_overhead.png" />

系統額外負荷非常低。額外負荷成本主要發生在
等待執行緒分派工作佇列連接埠時。忽略額外負荷成本，
整體非同步工作時間就是工作回呼中
實際執行的工作。

<a id="time_sensitive_threads" />

#### 時間敏感執行緒

[時間敏感執行緒](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads)是一項新規格，
Microsoft Game Development Kit (GDK) 使用它來識別不希望有任何封鎖或
意外長時間執行作業的遊戲執行緒。使用者可以透過呼叫
[XThreadSetTimeSensitive](/zh-TW/reference/system/xthread/functions/xthreadsettimesensitive)，將
遊戲執行緒標記為時間敏感。當執行緒標記為
時間敏感時，在該執行緒上叫用任何未提供一致且可靠
執行階段效能 (定義為非「時間敏感安全」) 的 Microsoft Game Development Kit (GDK) API 方法，
都會為您觸發偵錯判斷提示。

這些時間敏感安全方法在實作端包含下列
保證。

* 不執行隨選載入或初始化。
* 不進行跨 VM 或處理序界限的呼叫。
* 記憶體配置受到限制。

如此一來，時間敏感安全方法在輸入相同時會以一致的
時間執行，且不會意外造成效能飆升。
許多 Microsoft Game Development Kit (GDK) 方法在內部都標記為時間敏感安全，而且
執行緒不需要標記為時間敏感，就能從呼叫時間敏感安全方法
獲得保證。

大部分非同步 API 方法都是時間敏感安全的。不是時間敏感安全的方法，
則與工作佇列設定及其他低頻率呼叫相關，
這些呼叫通常在載入或初始化時叫用。所有與
啟動、管理、取消、完成或以其他方式直接處理
非同步工作相關的方法，都是時間敏感安全的。如需不安全函式的詳細資訊，請參閱「時間敏感執行緒」主題的[時間敏感執行緒的不安全函式](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads#unsafe-function-list)一節。

<a id="generic_usage_beyond_gdk_api_calls" />

### Microsoft Game Development Kit (GDK) API 呼叫以外的泛型用法

Microsoft Game Development Kit (GDK) 的非同步程式庫是泛型的，不限於 API 呼叫
用途。Microsoft Game Development Kit (GDK) 提供的任何非同步呼叫都會在內部使用
非同步程式庫，並為啟動工作和取得結果等動作提供[一致的方法](#consistent_cross_platform)。
如需將程式庫用於非 GDK API 用途的詳細資訊，
請參閱[範例程式碼](/zh-TW/build/core-features/common/async/async-libraries/async-library-xasync-example-run-simple-task)。

透過此設定，無論是 Microsoft Game Development Kit (GDK) 函式還是自訂
模式，[啟動非同步工作](/zh-TW/build/core-features/common/async/async-libraries/async-library-xasync-example-run-simple-task)
的流程都相同：為工作[設定 XAsyncBlock](/zh-TW/build/core-features/common/async/async-libraries/async-library-xasync-example-setup-async-task)，
然後啟動工作。啟動工作的可以是 Microsoft Game Development Kit (GDK) API
函式或自訂遊戲方法。

歡迎在整個遊戲中，將非同步程式庫用於任何
非同步用途。

## 參考 API 文件

* [XAsync (API 內容)](/zh-TW/reference/system/xasync/xasync_members)
  * 函式
    * [XAsyncGetStatus](/zh-TW/reference/system/xasync/functions/xasyncgetstatus)
  * 結構
    * [XAsyncBlock](/zh-TW/reference/system/xasync/structs/xasyncblock)
* [XAsyncProvider (API 內容)](/zh-TW/reference/system/xasyncprovider/xasyncprovider_members)
* [XTaskQueue (API 內容)](/zh-TW/reference/system/xtaskqueue/xtaskqueue_members)
  * 函式
    * [xtaskqueuesetcurrentprocesstaskqueue](/zh-TW/reference/system/xtaskqueue/functions/xtaskqueuesetcurrentprocesstaskqueue)
    * [xtaskqueuecreate](/zh-TW/reference/system/xtaskqueue/functions/xtaskqueuecreate)
    * [XTaskQueueDispatch](/zh-TW/reference/system/xtaskqueue/functions/xtaskqueuedispatch)
* [xuser (API 內容)](/zh-TW/reference/system/xuser/xuser_members)
  * 函式
    * [XUserAddAsync](/zh-TW/reference/system/xuser/functions/xuseraddasync)
    * [XUserAddResult](/zh-TW/reference/system/xuser/functions/xuseraddresult)
    * [XUserGetGamerPictureAsync](/zh-TW/reference/system/xuser/functions/xusergetgamerpictureasync)
    * [XUserGetGamerPictureResult](/zh-TW/reference/system/xuser/functions/xusergetgamerpictureresult)
* [xgamesave (API 內容)](/zh-TW/reference/system/xgamesave/xgamesave_members)
  * 函式
    * [XGameSaveInitializeProviderAsync](/zh-TW/reference/system/xgamesave/functions/xgamesaveinitializeproviderasync)
    * [XGameSaveInitializeProviderResult](/zh-TW/reference/system/xgamesave/functions/xgamesaveinitializeproviderresult)
    * [XGameSaveSubmitUpdateAsync](/zh-TW/reference/system/xgamesave/functions/xgamesavesubmitupdateasync)
    * [XGameSaveSubmitUpdateResult](/zh-TW/reference/system/xgamesave/functions/xgamesavesubmitupdateresult)
* [xpackage (API 內容)](/zh-TW/reference/system/xpackage/xpackage_members)
  * 函式
    * [XPackageInstallChunksAsync](/zh-TW/reference/system/xpackage/functions/xpackageinstallchunksasync)
    * [XPackageInstallChunksResult](/zh-TW/reference/system/xpackage/functions/xpackageinstallchunksresult)
* [xgameui (API 內容)](/zh-TW/reference/system/xgameui/xgameui_members)
  * 函式
    * [XGameUiShowMessageDialogAsync](/zh-TW/reference/system/xgameui/functions/xgameuishowmessagedialogasync)
    * [XGameUiShowMessageDialogResult](/zh-TW/reference/system/xgameui/functions/xgameuishowmessagedialogresult)
    * [XGameUiShowSendGameInviteAsync](/zh-TW/reference/system/xgameui/functions/xgameuishowsendgameinviteasync)
    * [XGameUiShowSendGameInviteResult](/zh-TW/reference/system/xgameui/functions/xgameuishowsendgameinviteresult)
* [xthread (API 內容)](/zh-TW/reference/system/xthread/xthread_members)
  * 函式
    * [XThreadSetTimeSensitive](/zh-TW/reference/system/xthread/functions/xthreadsettimesensitive)

## 另請參閱

[非同步程式設計模型](/zh-TW/build/core-features/common/async/async-programming-model)
[設計工作佇列](/zh-TW/build/core-features/common/async/async-task-queue-design)


## Related topics

- [XAsync](/zh-TW/reference/system/xasync/xasync_members.md)
- [XAsyncProvider](/zh-TW/reference/system/xasyncprovider/xasyncprovider_members.md)
- [XTaskQueue](/zh-TW/reference/system/xtaskqueue/xtaskqueue_members.md)
- [XGameUiShowSendGameInviteResult](/zh-TW/reference/system/xgameui/functions/xgameuishowsendgameinviteresult.md)
- [XPackageInstallChunksAsync](/zh-TW/reference/system/xpackage/functions/xpackageinstallchunksasync.md)
