共用方式為


IAsyncOperation<TResult> 介面

定義

表示異步操作,這個作業會在完成時傳回結果。 這是許多 Windows 執行時間 (WinRT) 異步方法的傳回類型,這些方法具有結果,但不會報告進度。

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> 是許多 WinRT 異步方法的傳回類型,這些方法會在完成時產生結果,但不會報告進度。 這構成超過 650 個不同的 WinRT API。 報告進度並產生結果的 API 會使用另一個介面,IAsyncOperationWithProgress<TResult,TProgress>。

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

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

某些 WinRT 異步方法會使用自訂作業類型,而不是使用 IAsyncOperation<TResult>。 例如,DataReaderLoadOperation 是 WinRT 類型,會使用 uint 做為結果類型來實作 IAsyncOperationDataReaderLoadOperation 類型接著會作為 DataReader.LoadAsync 方法的自定義作業/結果類型。

如果您有傳回 .NET Task<T> 的方法,而且需要傳遞至 WinRT API IAsyncOperation<TResult>,您可以使用 AsAsyncOperation 擴充方法。

C++/WinRT 擴充功能函式

注意

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

TResult get() const;

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

AsyncStatus wait_for(TimeSpan const& timeout) const;

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

介面繼承

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

實作者的注意事項

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

屬性

Completed

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

ErrorCode

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

(繼承來源 IAsyncInfo)
Id

取得異步操作的句柄。

(繼承來源 IAsyncInfo)
Status

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

(繼承來源 IAsyncInfo)

方法

Cancel()

取消異步操作。

(繼承來源 IAsyncInfo)
Close()

關閉異步操作。

(繼承來源 IAsyncInfo)
GetResults()

傳回作業的結果。

適用於

另請參閱