共用方式為


IAsyncAction 介面

定義

表示異步動作。 這是許多沒有結果物件的 Windows 運行時間 (WinRT) 異步方法的傳回類型,而且不會報告進行中的進度。

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 是所有不通訊結果對象或進行中進度之 WinRT 異步方法的傳回類型。 這構成超過 300 個不同的 WinRT API。 報告進度但沒有結果的 API 會使用另一個介面,IAsyncActionWithProgress

當您在應用程式程式代碼中使用傳回 IAsyncAction 的方法時,通常不會直接存取 IAsyncAction 傳回值。 這是因為您幾乎一律會使用特定語言的可等候語法。 在此情況下,方法的明顯傳回值 void。 如需詳細資訊,請參閱 異步程序設計,或 WinRT 異步程式設計的語言特定指南之一(在 C# 或 Visual BasicC++JavaScript中呼叫異步 API)。

IAsyncAction 也是某些進階案例公用程式 API 的輸入類型,例如 CoreDispatcher.RunAsyncThreadPool.RunAsync

即使您未使用特定語言的可等候語法,直接使用 IAsyncAction 並不常見。 每個語言都有擴充點,通常比 WinRT 介面更容易使用。 JavaScript 具有 WinJS.Promisethen/done 語法。 .NET 具有 AsTask 擴充方法,一旦 IAsyncAction 轉換成 工作,就更容易取消、完成時取得通知等等。 針對 C++/CX,您可以使用 並行運行時間 來包裝呼叫(並使用 create_task)。 換句話說,IAsyncAction 可以視為運行時間層級基礎結構,每個語言都會使用它們作為架構,以自己的方式支援可等候的語法或異步程序設計模型。

某些 WinRT 異步方法不使用 IAsyncAction,而是使用自定義動作類型(其名稱中可能有 “Operation” 而不是 “Action”。 例如,SignOutUserOperation 是實作 IAsyncAction的 WinRT 類型。 SignOutUserOperation 類型接著會作為 SignOutUserAsync 方法的自定義動作傳回類型。

如果您有傳回 .NET Task 且需要傳遞至 WinRT API IAsyncAction 的方法,您可以使用 AsAsyncAction 擴充方法。

C++/WinRT 擴充功能函式

注意

擴充功能存在於特定 WinRT API 的 C++/WinRT 投影類型上。 例如,winrt::Windows::Foundation::IAsyncActionIAsyncAction的 C++/WinRT 投影類型。 擴充函式不是實際 WinRT 類型之應用程式二進位介面 (ABI) 介面的一部分,因此它們不會列為 WinRT API 的成員。 但是,您可以從任何C++/WinRT 專案中呼叫它們。 請參閱 C++/WinRT 函式,以擴充 Windows 執行時間 API

void get() const;

同步等候動作完成。 如果取消動作,或進入錯誤狀態,則會擲回對應的例外狀況。 您不得從單個線程 Apartment 呼叫它。 如需詳細資訊,以及示範如何呼叫 get的程式代碼範例,請參閱 撰寫協同程式

AsyncStatus wait_for(TimeSpan const& timeout) const;

同步等候動作完成,或等候指定的逾時。 傳回 IAsyncAction的狀態,如果逾時經過,則傳回 AsyncStatus::Started 的狀態。 如果動作沒有逾時,請呼叫 GetResults 以取得動作的結果。 如需詳細資訊,以及示範如何呼叫 wait_for的程式代碼範例,請參閱 異步逾時可讓您輕鬆地

介面繼承

繼承 IAsyncInfo。 實作 的類型也會實作 IAsyncInfo介面成員:

實作者的注意事項

如同呼叫現有的方法,有一些特定語言的方法可用來定義不會直接使用 IAsyncInfo 異步方法。 如果使用 .NET 撰寫程式代碼,您的方法可以傳回 Task。 針對 C++/CX,您可以使用 並行執行時間。 不過,如果您要定義 元件,則可以在內部使用 Task/task,但您必須傳回公用方法的其中一個 WinRT 介面。 特定語言異步支援類型(以及您可能在程式碼中使用的許多其他語言特定類型)無法用於 WinRT 元件的公用介面區。

屬性

Completed

取得或設定動作完成時所呼叫的委派。

ErrorCode

取得描述異步操作錯誤條件的字串。

(繼承來源 IAsyncInfo)
Id

取得異步操作的句柄。

(繼承來源 IAsyncInfo)
Status

取得值,這個值表示異步操作的狀態。

(繼承來源 IAsyncInfo)

方法

Cancel()

取消異步操作。

(繼承來源 IAsyncInfo)
Close()

關閉異步操作。

(繼承來源 IAsyncInfo)
GetResults()

傳回動作的結果。

適用於

另請參閱