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::IAsyncActionIAsyncAction 的 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()

傳回作業的結果。

適用於

另請參閱