IAsyncAction 介面
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
表示非同步動作。 這是許多 Windows 執行階段 異步方法的傳回類型,這些方法沒有結果物件,而且不會報告進行中的進度。
public interface class IAsyncAction : IAsyncInfo
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.FoundationContract, 65536)]
/// [Windows.Foundation.Metadata.Guid(1516535814, 33850, 19881, 134, 91, 157, 38, 229, 223, 173, 123)]
struct IAsyncAction : IAsyncInfo
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.FoundationContract), 65536)]
[Windows.Foundation.Metadata.Guid(1516535814, 33850, 19881, 134, 91, 157, 38, 229, 223, 173, 123)]
public interface IAsyncAction : IAsyncInfo
Public Interface IAsyncAction
Implements IAsyncInfo
- 衍生
- 屬性
- 實作
Windows 需求
裝置系列 |
Windows 10 (已於 10.0.10240.0 引進)
|
API contract |
Windows.Foundation.FoundationContract (已於 v1.0 引進)
|
備註
IAsyncAction 是未通訊結果對象或進行中進度之所有 Windows 執行階段 異步方法的傳回類型。 這構成超過 300 個不同的 Windows 執行階段 API。 執行報告進度 (但沒有結果的 API) 使用另一個介面 IAsyncActionWithProgress TProgress<>。
當您在應用程式程式代碼中使用傳回 IAsyncAction 的方法時,通常不會直接存取 IAsyncAction 傳回值。 這是因為您幾乎一律使用語言特定的可等候語法。 在此情況下,方法的明顯傳回值為 void。 如需詳細資訊,請參閱異步程序設計或其中一個語言特定指南,以 Windows 執行階段 異步程序設計 (在 C# 或 Visual Basic、C++、JavaScript) 中呼叫異步 API。
IAsyncAction 也是某些進階案例公用程式 API 的輸入類型,例如 CoreDispatcher.RunAsync 和 ThreadPool.RunAsync。
即使您未使用特定語言的可等候語法,仍不常直接使用 IAsyncAction。 每個語言都有擴充點,通常比 Windows 執行階段 介面更容易使用。 JavaScript 具有 WinJS.Promise,以及 then/done 語法。 .NET 具有 AsTask 擴充方法,而且一旦 IAsyncAction 轉換成 Task,就可以更輕鬆地取消、取得完成通知等等。 針對 C++/CX,您可以使用 並行運行 時間 (包裝呼叫,並使用 create_task) 。 換句話說,IAsyncAction 可以視為運行時間層級基礎結構,每個語言都會使用它作為架構來支援可等候的語法或異步程序設計模型。
某些 Windows 執行階段 異步方法不會使用 IAsyncAction,而是使用自定義動作類型, (其名稱中可能有 “Operation” 而非 “Action”) 。 例如,SignOutUserOperation 是實作 IAsyncAction 的 Windows 執行階段 類型。 SignOutUserOperation 類型接著會當做 SignOutUserAsync 方法的自定義動作傳回類型使用。
C++/WinRT 擴充功能函式
注意
延伸模組函式存在於特定 Windows 執行階段 API 的 C++/WinRT 投影類型上。 例如,winrt::Windows::Foundation::IAsyncAction 是 IAsyncAction 的 C++/WinRT 投影類型。 擴充函式不是應用程式二進位介面的一部分, (實際 Windows 執行階段 類型的 ABI) 介面,因此它們不會列為 Windows 執行階段 API 的成員。 但您可以從任何 C++/WinRT 專案內呼叫它們。 請參閱擴充 Windows 執行階段 API 的 C++/WinRT 函式。
void get() const;
以同步方式等候動作完成。 如果動作已取消,或進入錯誤狀態,則會擲回對應的例外狀況。 您不得從單個線程 Apartment 呼叫它。 如需詳細資訊,以及示範如何呼叫 get 的程式代碼範例,請參閱 撰寫協同程式。
AsyncStatus wait_for(TimeSpan const& timeout) const;
以同步方式等候動作完成,或等候指定的逾時。 傳回 IAsyncAction 的狀態,如果逾時經過,則傳回 AsyncStatus::Started 。 如果動作未逾時,請呼叫 GetResults 以取得動作的結果。 如需詳細資訊,以及示範如何呼叫 wait_for的程式代碼範例,請參閱 簡化異步逾時。
介面繼承
IAsyncAction 繼承 IAsyncInfo。 實作 IAsyncAction 的類型也會實作 IAsyncInfo 的介面成員:
實作者的注意事項
如同呼叫現有的方法,有一些特定語言的方式來定義不會直接使用 IAsyncInfo 的異步方法。 如果使用 .NET 撰寫程序代碼,您的方法可以傳回 Task。 針對 C++/CX,您可以使用 並行運行時間。 不過,如果您要定義元件,您可以在內部使用Task工作/,但您必須傳回公用方法的其中一個 Windows 執行階段介面。 特定語言的異步支援類型 (,以及您可能在程式代碼中使用的許多其他語言特定類型,) 無法用於 Windows 執行階段元件的公用介面區。
屬性
Completed |
取得或設定動作完成時所呼叫的委派。 |
ErrorCode |
取得描述異步操作錯誤條件的字串。 (繼承來源 IAsyncInfo) |
Id |
取得異步操作的句柄。 (繼承來源 IAsyncInfo) |
Status |
取得值,這個值表示異步操作的狀態。 (繼承來源 IAsyncInfo) |
方法
Cancel() |
取消異步操作。 (繼承來源 IAsyncInfo) |
Close() |
關閉異步操作。 (繼承來源 IAsyncInfo) |
GetResults() |
傳回動作的結果。 |
適用於
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應