IAsyncOperation<TResult> 介面
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
表示異步操作,此作業會在完成時傳回結果。 這是許多 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 Basic、C++、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() |
傳回作業的結果。 |
適用於
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應