リモート処理シナリオでの非同期プログラミングは、.NET リモート処理自体の構成および要件が異なる以外は、単一のアプリケーション ドメインやコンテキストでの非同期プログラミングと同じです。.NET リモート処理と、同期デリゲートおよび非同期デリゲートを使用した完全なサンプルについては、「リモート処理の例 : 非同期リモート処理」を参照してください。
単一のアプリケーション ドメインでの非同期プログラミングと同様に、.NET リモート処理シナリオでの非同期プログラミングの使用は、次のことを意味しています。
特定のリモート呼び出しが非同期かどうかは、呼び出し元が判断します。
リモート型は、クライアントによる非同期動作を明示的にサポートする必要はありません。
ランタイムは完全なタイプ セーフを強制します。
メソッドを待機または同期するには、System.Threading オブジェクトを適切に使用する必要があります。
しかし、アプリケーション ドメインやコンテキストの境界を越えて呼び出しを行うアプリケーションの場合、.NET リモート処理を使用するには、.NET リモート処理システムを構成し、クライアントのプログラミング モデルがリモート呼び出しのターゲットとしても使用できるかどうかを確認する必要があります。理由は簡単で、非同期呼び出しを使用する場合にはコールバック関数を使用することもありますが、このコールバック関数は .NET リモート処理システムがサーバーから呼び出すからです。たとえば、リモート処理が不可能な静的メソッドにデリゲートを渡した場合、またはチャネルのポートを "0" に設定してシステムがクライアントのポートを自動的に選択できるようにしなかった場合、サーバーに対する呼び出しは完了しますが、クライアントへのコールバックが完了しないため、呼び出しの結果を取得する方法がありません。
クライアントでは、MarshalByRefObject を拡張したり、リモート型を構成したりする必要はありませんが、それ以外は、サーバーとして使用するリモート型と同じように、次に示す規則に従う必要があります。
インスタンスはコールバック関数を受け取る必要があります。
コールバック関数をリッスンするようにチャネルを登録する必要があります。
参照
処理手順
方法 : リモート オブジェクトのメソッドを非同期で呼び出す
概念
リモート オブジェクトのメソッドを非同期で呼び出す場合の問題
リモート処理の例 : 非同期リモート処理
リモート アプリケーションの構成