IAsyncAction インターフェイス

定義

非同期アクションを表します。 これは、結果オブジェクトがなく、進行中の進行状況を報告しない多くの Windows ランタイム (WinRT) 非同期メソッドの戻り値の型です。

public interface class IAsyncAction : IAsyncInfo
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.FoundationContract, 65536)]
/// [Windows.Foundation.Metadata.Guid(1516535814, 33850, 19881, 134, 91, 157, 38, 229, 223, 173, 123)]
struct IAsyncAction : IAsyncInfo
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.FoundationContract), 65536)]
[Windows.Foundation.Metadata.Guid(1516535814, 33850, 19881, 134, 91, 157, 38, 229, 223, 173, 123)]
public interface IAsyncAction : IAsyncInfo
Public Interface IAsyncAction
Implements IAsyncInfo
派生
属性
実装

Windows の要件

デバイス ファミリ
Windows 10 (10.0.10240.0 で導入)
API contract
Windows.Foundation.FoundationContract (v1.0 で導入)

注釈

IAsyncAction は、結果オブジェクトまたは進行中の進行状況を伝えないすべての WinRT 非同期メソッドの戻り値の型です。 これは、300 を超える異なる WinRT API を構成します。 進行状況を報告するが結果が得られない API は、IAsyncActionWithProgress別のインターフェイスを使用します。

アプリ コードで IAsyncAction を返すメソッドを使用する場合、通常、IAsyncAction 戻り値には直接アクセスしません。 これは、ほとんどの場合、言語固有の待機可能な構文を使用するためです。 この場合、メソッドの明らかな戻り値は void。 詳細については、「非同期プログラミング」、または WinRT 非同期プログラミングに関する言語固有のガイドの 1 つ (C# または Visual BasicC++JavaScript) を参照してください。

IAsyncAction は、CoreDispatcher.RunAsyncThreadPool.RunAsyncなど、一部の高度なシナリオユーティリティ API の入力の種類でもあります。

言語固有の待機可能な構文を使用しない場合でも、IAsyncAction を直接使用することは一般的ではありません。 各言語には、WinRT インターフェイスよりも一般的に使いやすい拡張ポイントがあります。 JavaScript には、WinJS.Promiseと 構文が されています。 .NET には AsTask 拡張メソッドがあり、IAsyncActionTaskに変換すると、キャンセルや完了時の通知の取得などが簡単になります。 C++/CX の場合は、コンカレンシー ランタイム を使用して呼び出しをラップできます (また、create_taskを使用します)。 つまり、IAsyncAction はランタイム レベルのインフラストラクチャと見なすことができます。各言語は、待機可能な構文または非同期プログラミング モデルを独自の方法でサポートするためのフレームワークとして使用されます。

一部の WinRT 非同期メソッドでは、IAsyncActionを使用する代わりに、カスタム アクションの種類 (名前に "Action" ではなく "Operation" が含まれる場合があります) が使用されます。 たとえば、SignOutUserOperation は、を実装する WinRT 型です。 SignOutUserOperation 型は、SignOutUserAsync メソッドのカスタム アクションの戻り値の型として使用されます。

.NET Task を返すメソッドがあり、WinRT API に渡す IAsyncAction が必要な場合は、AsAsyncAction 拡張メソッドを使用できます。

C++/WinRT 拡張機能関数

手記

拡張関数は、特定の WinRT API の C++/WinRT プロジェクション型に存在します。 たとえば、winrt::Windows::Foundation::IAsyncAction は、IAsyncActionの C++/WinRT プロジェクションの種類です。 拡張機能関数は、実際の WinRT 型のアプリケーション バイナリ インターフェイス (ABI) サーフェスの一部ではないため、WinRT API のメンバーとして一覧表示されません。 ただし、任意の C++/WinRT プロジェクト内から呼び出すことができます。 Windows ランタイム APIを拡張する C++/WinRT 関数の を参照してください。

void get() const;

アクションが完了するまで同期的に待機します。 アクションが取り消された場合、またはエラー状態になった場合は、対応する例外をスローします。 シングルスレッド アパートメントから呼び出すことはできません。 詳細と、を呼び出す方法を示すコード例については、「コルーチンを記述する を参照してください。

AsyncStatus wait_for(TimeSpan const& timeout) const;

アクションが完了するか、指定されたタイムアウトまで同期的に待機します。 タイムアウトが経過した場合は、の状態、または AsyncStatus::Started を返します。 アクションがタイムアウトしなかった場合は、GetResults を呼び出して、アクションの結果を取得します。 詳細と、wait_forを呼び出す方法を示すコード例については、「非同期タイムアウト 簡単にする」を参照してください。

インターフェイスの継承

は IAsyncInfo継承します。 IAsyncAction 実装する型は、IAsyncInfoのインターフェイス メンバーも実装します。

  • Cancel メソッド
  • Close メソッド
  • ErrorCode プロパティの
  • Id プロパティ
  • Status プロパティ

実装者へのメモ

既存のメソッドの呼び出しと同様に、IAsyncInfo を直接使用しない非同期メソッド 定義する言語固有の方法があります。 .NET を使用してコードを記述する場合、メソッドは Taskを返すことができます。 C++/CX の場合は、コンカレンシー ランタイムを使用できます。 ただし、コンポーネントを定義している場合は、内部で Task/task を使用できますが、パブリック メソッド用の WinRT インターフェイスのいずれかを返す必要があります。 言語固有の非同期サポート型 (および従来コードで使用する可能性がある他の多くの言語固有の型) は、WinRT コンポーネントのパブリック 領域には使用できません。

プロパティ

Completed

アクションの完了時に呼び出されるデリゲートを取得または設定します。

ErrorCode

非同期操作のエラー条件を記述する文字列を取得します。

(継承元 IAsyncInfo)
Id

非同期操作のハンドルを取得します。

(継承元 IAsyncInfo)
Status

非同期操作の状態を示す値を取得します。

(継承元 IAsyncInfo)

メソッド

Cancel()

非同期操作を取り消します。

(継承元 IAsyncInfo)
Close()

非同期操作を閉じます。

(継承元 IAsyncInfo)
GetResults()

アクションの結果を返します。

適用対象

こちらもご覧ください