IAsyncOperation<TResult> 介面

定義

表示非同步作業,這會在完成時傳回結果。 這是許多Windows 執行階段非同步方法的傳回類型,這些方法具有結果但不會報告進度。

public interface class IAsyncOperation : IAsyncInfo
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.FoundationContract, 65536)]
/// [Windows.Foundation.Metadata.Guid(2680336571, 58438, 17634, 170, 97, 156, 171, 143, 99, 106, 242)]
template <typename TResult>
struct IAsyncOperation : IAsyncInfo
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.FoundationContract), 65536)]
[Windows.Foundation.Metadata.Guid(2680336571, 58438, 17634, 170, 97, 156, 171, 143, 99, 106, 242)]
public interface IAsyncOperation<TResult> : IAsyncInfo
Public Interface IAsyncOperation(Of TResult)
Implements IAsyncInfo

類型參數

TResult
衍生
屬性
實作

Windows 需求

裝置系列
Windows 10 (已於 10.0.10240.0 引進)
API contract
Windows.Foundation.FoundationContract (已於 v1.0 引進)

備註

IAsyncOperation < TResult > 是許多Windows 執行階段非同步方法的傳回類型,這些方法會在完成時產生結果,但不會報告進度。 這構成超過 650 個不同的Windows 執行階段 API。 執行報告進度的 API (,並讓結果) 使用另一個介面IAsyncOperationWithProgress < TResult,TProgress> 。

當您在 app 程式碼中使用傳回 IAsyncOperation < TResult (的方法搭配TResult> 特定條件約束) 時,您通常不會直接存取 IAsyncOperation 傳回值。 這是因為您幾乎一律使用語言特定的可等候語法。 在此情況下,方法的明顯傳回值是提供做為 TResult 參數的類型。 如需詳細資訊,請參閱非同步程式設計或其中一個語言特定的指南,以Windows 執行階段非同步程式設計, (在 C# 或 Visual BasicC++JavaScript) 中呼叫非同步 API。

即使您未使用特定語言的可等候語法,仍不常直接使用 IAsyncOperation < TResult > 。 每個語言都有擴充點,通常比Windows 執行階段介面更容易使用。 JavaScript 具有 WinJS.Promise,以及 then/done 語法。 .NET 具有AsTask擴充方法,一旦 IAsyncOperation <TResult 轉換成 Task < TResult >> ,就能更輕鬆地取得結果、取消、完成通知等等。 針對 C++/CX,您可以使用 並行運行 時間 (包裝呼叫,並使用 create_task) 。 換句話說,IAsyncOperation < TResult > 可以視為執行時間層級基礎結構,每個語言都會用做架構來支援可等候的語法或非同步程式設計模型。

某些 Windows 執行階段非同步方法會使用自訂作業類型,而不是使用 IAsyncOperation < TResult > 。 例如,DataReaderLoadOperation是Windows 執行階段類型,使用uint作為結果類型來實作 IAsyncOperation。 DataReaderLoadOperation類型接著會當做DataReader.LoadAsync方法的自訂作業/結果類型使用。

C++/WinRT 擴充功能函式

注意

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

TResult get() const;

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

AsyncStatus wait_for(TimeSpan const& timeout) const;

以同步方式等候作業完成,或等候指定的逾時。 傳回 IAsyncOperation的狀態,如果逾時經過,則傳回 AsyncStatus::Started 。 如果動作未逾時,請呼叫 GetResults 以取得作業的結果。 如需詳細資訊,以及示範如何呼叫 wait_for的程式碼範例,請參閱 簡化非同步逾時

介面繼承

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

實作者的注意事項

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

屬性

Completed

取得或設定處理作業已完成通知的方法。

ErrorCode

取得描述非同步作業錯誤條件的字串。

(繼承來源 IAsyncInfo)
Id

取得非同步作業的控制碼。

(繼承來源 IAsyncInfo)
Status

取得值,這個值表示非同步作業的狀態。

(繼承來源 IAsyncInfo)

方法

Cancel()

取消非同步作業。

(繼承來源 IAsyncInfo)
Close()

關閉非同步作業。

(繼承來源 IAsyncInfo)
GetResults()

傳回作業的結果。

適用於

另請參閱