IAsyncOperation<TResult> 介面
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
表示異步操作,這個作業會在完成時傳回結果。 這是許多 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 Basic、C++、JavaScript中呼叫異步 API)。
即使您未使用特定語言的可等候語法,直接使用 IAsyncOperation<TResult>
並不常見。 每個語言都有擴充點,通常比 WinRT 介面更容易使用。 JavaScript 具有 WinJS.Promise和 then
/done
語法。 .NET 具有 AsTask 擴充方法,一旦 IAsyncOperation<TResult>
轉換成 工作<TResult>,即可更輕鬆地取得結果、取消、完成時取得通知等等。 針對 C++/CX,您可以使用 並行運行時間 來包裝呼叫(並使用 create_task)。 換句話說,IAsyncOperation<TResult>
可以視為運行時間層級基礎結構,每個語言都會使用它們作為架構,以自己的方式支援可等候的語法或異步程序設計模型。
某些 WinRT 異步方法會使用自訂作業類型,而不是使用 IAsyncOperation<TResult>
。 例如,DataReaderLoadOperation 是 WinRT 類型,會使用 uint
做為結果類型來實作 IAsyncOperation
。
DataReaderLoadOperation 類型接著會作為 DataReader.LoadAsync 方法的自定義作業/結果類型。
如果您有傳回 .NET Task<T>
的方法,而且需要傳遞至 WinRT API IAsyncOperation<TResult>
,您可以使用 AsAsyncOperation 擴充方法。
C++/WinRT 擴充功能函式
注意
擴充功能存在於特定 WinRT API 的 C++/WinRT 投影類型上。 例如,winrt::Windows::Foundation::IAsyncAction
是 IAsyncActionC++/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
的程式代碼範例,請參閱 異步逾時可讓您輕鬆地。
介面繼承
實作者的注意事項
如同呼叫現有的方法,有一些語言特定的方法來定義不會直接使用 IAsyncOperation<TResult>
的異步方法。 如果使用 .NET 撰寫程式代碼,您的方法可以傳回 Task<TResult>。 針對 C++/CX,您可以使用 並行執行時間。 不過,如果您要定義 元件,則可以在內部使用 Task
/task
,但您必須傳回公用方法的其中一個 WinRT 介面。 特定語言異步支援類型(以及您可能在程式碼中使用的許多其他語言特定類型)無法用於 WinRT 元件的公用介面區。
屬性
Completed |
取得或設定作業完成時所呼叫的委派。 |
ErrorCode |
取得描述異步操作錯誤條件的字串。 (繼承來源 IAsyncInfo) |
Id |
取得異步操作的句柄。 (繼承來源 IAsyncInfo) |
Status |
取得值,這個值表示異步操作的狀態。 (繼承來源 IAsyncInfo) |
方法
Cancel() |
取消異步操作。 (繼承來源 IAsyncInfo) |
Close() |
關閉異步操作。 (繼承來源 IAsyncInfo) |
GetResults() |
傳回作業的結果。 |
適用於
另請參閱
- IAsyncInfo
- IAsyncOperationWithProgress<TResult,TProgress>
- IAsyncAction
- 工作
- 異步程序設計
- 使用 Windows 執行時間元件