IAsyncAction 介面
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
表示異步動作。 這是許多沒有結果物件的 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 Basic、C++、JavaScript中呼叫異步 API)。
IAsyncAction
也是某些進階案例公用程式 API 的輸入類型,例如 CoreDispatcher.RunAsync 和 ThreadPool.RunAsync。
即使您未使用特定語言的可等候語法,直接使用 IAsyncAction
並不常見。 每個語言都有擴充點,通常比 WinRT 介面更容易使用。 JavaScript 具有 WinJS.Promise和 then
/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::IAsyncAction
是 IAsyncAction
的 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 異步方法。 如果使用 .NET 撰寫程式代碼,您的方法可以傳回 Task。 針對 C++/CX,您可以使用 並行執行時間。 不過,如果您要定義 元件,則可以在內部使用 Task
/task
,但您必須傳回公用方法的其中一個 WinRT 介面。 特定語言異步支援類型(以及您可能在程式碼中使用的許多其他語言特定類型)無法用於 WinRT 元件的公用介面區。
屬性
Completed |
取得或設定動作完成時所呼叫的委派。 |
ErrorCode |
取得描述異步操作錯誤條件的字串。 (繼承來源 IAsyncInfo) |
Id |
取得異步操作的句柄。 (繼承來源 IAsyncInfo) |
Status |
取得值,這個值表示異步操作的狀態。 (繼承來源 IAsyncInfo) |
方法
Cancel() |
取消異步操作。 (繼承來源 IAsyncInfo) |
Close() |
關閉異步操作。 (繼承來源 IAsyncInfo) |
GetResults() |
傳回動作的結果。 |