AsyncResult クラス
アセンブリ: mscorlib (mscorlib.dll 内)


AsyncResult クラスは、非同期デリゲートと組み合わせて使用します。デリゲートの BeginInvoke メソッドから返された IAsyncResult を AsyncResult にキャストできます。AsyncResult には、非同期の呼び出しが行われたデリゲート オブジェクトを保持する AsyncDelegate プロパティがあります。
BeginInvoke と非同期デリゲートの詳細については、「デリゲートを使用した非同期プログラミング」を参照してください。

非同期デリゲートでの非同期操作の結果を取得するために、AsyncResult クラスを使用する方法を次のコード例に示します。
Imports System Imports System.Threading Imports System.Runtime.Remoting Imports System.Runtime.Remoting.Contexts Imports System.Runtime.Remoting.Messaging ' Context-bound type with the Synchronization context attribute. <Synchronization()> Public Class SampleSyncronized Inherits ContextBoundObject ' A method that does some work, and returns the square of the given number. Public Function Square(i As Integer) As Integer Console.Write("The hash of the thread executing ") Console.WriteLine("SampleSyncronized.Square is: {0}", Thread.CurrentThread.GetHashCode()) Return i * i End Function 'Square End Class 'SampleSyncronized ' The async delegate used to call a method with this signature asynchronously. Delegate Function SampSyncSqrDelegate(i As Integer) As Integer Public Class AsyncResultSample ' Asynchronous Callback method. Public Shared Sub MyCallback(ar As IAsyncResult) ' Obtains the last parameter of the delegate call. Dim value As Integer = Convert.ToInt32(ar.AsyncState) ' Obtains return value from the delegate call using EndInvoke. Dim aResult As AsyncResult = CType(ar, AsyncResult) Dim temp As SampSyncSqrDelegate = CType(aResult.AsyncDelegate, SampSyncSqrDelegate) Dim result As Integer = temp.EndInvoke(ar) Console.Write("Simple.SomeMethod (AsyncCallback): Result of ") Console.WriteLine("{0} in SampleSynchronized.Square is {1} ", value, result) End Sub 'MyCallback Public Shared Sub Main() Dim result As Integer Dim param As Integer ' Creates an instance of a context-bound type SampleSynchronized. Dim sampSyncObj As New SampleSyncronized() ' Checks whether the object is a proxy, since it is context-bound. If RemotingServices.IsTransparentProxy(sampSyncObj) Then Console.WriteLine("sampSyncObj is a proxy.") Else Console.WriteLine("sampSyncObj is NOT a proxy.") End If param = 10 Console.WriteLine("") Console.WriteLine("Making a synchronous call on the context-bound object:") result = sampSyncObj.Square(param) Console.Write("The result of calling sampSyncObj.Square with ") Console.WriteLine("{0} is {1}.", param, result) Console.WriteLine("") Dim sampleDelegate As New SampSyncSqrDelegate(AddressOf sampSyncObj.Square) param = 8 Console.WriteLine("Making a single asynchronous call on the context-bound object:") Dim ar1 As IAsyncResult = sampleDelegate.BeginInvoke(param, New AsyncCallback(AddressOf AsyncResultSample.MyCallback), param) Console.WriteLine("Waiting for the asynchronous call to complete...") Dim wh As WaitHandle = ar1.AsyncWaitHandle wh.WaitOne() Console.WriteLine("") Console.WriteLine("Waiting for the AsyncCallback to complete...") Thread.Sleep(1000) End Sub 'Main End Class 'AsyncResultSample
using System; using System.Threading; using System.Runtime.Remoting; using System.Runtime.Remoting.Contexts; using System.Runtime.Remoting.Messaging; // Context-bound type with the Synchronization context attribute. [Synchronization()] public class SampleSyncronized : ContextBoundObject { // A method that does some work, and returns the square of the given number. public int Square(int i) { Console.Write("The hash of the thread executing "); Console.WriteLine("SampleSyncronized.Square is: {0}", Thread.CurrentThread.GetHashCode()); return i*i; } } // The async delegate used to call a method with this signature asynchronously. public delegate int SampSyncSqrDelegate(int i); public class AsyncResultSample { // Asynchronous Callback method. public static void MyCallback(IAsyncResult ar) { // Obtains the last parameter of the delegate call. int value = Convert.ToInt32(ar.AsyncState); // Obtains return value from the delegate call using EndInvoke. AsyncResult aResult = (AsyncResult)ar; SampSyncSqrDelegate temp = (SampSyncSqrDelegate)aResult.AsyncDelegate; int result = temp.EndInvoke(ar); Console.Write("Simple.SomeMethod (AsyncCallback): Result of "); Console.WriteLine("{0} in SampleSynchronized.Square is {1} ", value, result); } public static void Main() { int result; int param; // Creates an instance of a context-bound type SampleSynchronized. SampleSyncronized sampSyncObj = new SampleSyncronized(); // Checks whether the object is a proxy, since it is context-bound. if (RemotingServices.IsTransparentProxy(sampSyncObj)) Console.WriteLine("sampSyncObj is a proxy."); else Console.WriteLine("sampSyncObj is NOT a proxy."); param = 10; Console.WriteLine(""); Console.WriteLine("Making a synchronous call on the context-bound object:"); result = sampSyncObj.Square(param); Console.Write("The result of calling sampSyncObj.Square with "); Console.WriteLine("{0} is {1}.", param, result); Console.WriteLine(""); SampSyncSqrDelegate sampleDelegate = new SampSyncSqrDelegate(sampSyncObj.Square); param = 8; Console.WriteLine("Making a single asynchronous call on the context-bound object:"); IAsyncResult ar1 = sampleDelegate.BeginInvoke( param, new AsyncCallback(AsyncResultSample.MyCallback), param); Console.WriteLine("Waiting for the asynchronous call to complete..."); WaitHandle wh = ar1.AsyncWaitHandle; wh.WaitOne(); Console.WriteLine(""); Console.WriteLine("Waiting for the AsyncCallback to complete..."); Thread.Sleep(1000); } }
using namespace System; using namespace System::Threading; using namespace System::Runtime::Remoting; using namespace System::Runtime::Remoting::Contexts; using namespace System::Runtime::Remoting::Messaging; // Context-bound type with the Synchronization context attribute. [Synchronization] public ref class SampleSyncronized: public ContextBoundObject { public: // A method that does some work, and returns the square of the given number. int Square( int i ) { Console::Write( "The hash of the thread executing " ); Console::WriteLine( "SampleSyncronized::Square is: {0}", Thread::CurrentThread->GetHashCode() ); return i * i; } }; // The async delegate used to call a method with this signature asynchronously. int i ); public ref class AsyncResultSample { public: // Asynchronous Callback method. static void MyCallback( IAsyncResult^ ar ) { // Obtains the last parameter of the delegate call. int value = Convert::ToInt32( ar->AsyncState ); // Obtains return value from the delegate call using EndInvoke. AsyncResult^ aResult = dynamic_cast<AsyncResult^>(ar); SampSyncSqrDelegate^ temp = static_cast<SampSyncSqrDelegate^>(aResult->AsyncDelegate); int result = temp->EndInvoke( ar ); Console::Write( "Simple::SomeMethod (AsyncCallback): Result of " ); Console::WriteLine( " {0} in SampleSynchronized::Square is {1} ", value, result ); } }; int main() { int result; int param; // Creates an instance of a context-bound type SampleSynchronized. SampleSyncronized^ sampSyncObj = gcnew SampleSyncronized; // Checks whether the Object* is a proxy, since it is context-bound. if ( RemotingServices::IsTransparentProxy( sampSyncObj ) ) Console::WriteLine( "sampSyncObj is a proxy." ); else Console::WriteLine( "sampSyncObj is NOT a proxy." ); param = 10; Console::WriteLine( "" ); Console::WriteLine( "Making a synchronous call on the context-bound Object*:" ); result = sampSyncObj->Square( param ); Console::Write( "The result of calling sampSyncObj.Square with " ); Console::WriteLine( " {0} is {1}.", param, result ); Console::WriteLine( "" ); SampSyncSqrDelegate^ sampleDelegate = gcnew SampSyncSqrDelegate( sampSyncObj, &SampleSyncronized::Square ); param = 8; Console::WriteLine( "Making a single asynchronous call on the context-bound Object*:" ); IAsyncResult^ ar1 = sampleDelegate->BeginInvoke( param, gcnew AsyncCallback( AsyncResultSample::MyCallback ), param ); Console::WriteLine( "Waiting for the asynchronous call to complete..." ); WaitHandle^ wh = ar1->AsyncWaitHandle; wh->WaitOne(); Console::WriteLine( "" ); Console::WriteLine( "Waiting for the AsyncCallback to complete..." ); Thread::Sleep( 1000 ); return 0; }
import System.*; import System.Threading.*; import System.Runtime.Remoting.*; import System.Runtime.Remoting.Contexts.*; import System.Runtime.Remoting.Messaging.*; // Context-bound type with the Synchronization context attribute. /** @attribute Synchronization() */ public class SampleSyncronized extends ContextBoundObject { // A method that does some work, and returns the square of the given number. public int Square(int i) { Console.Write("The hash of the thread executing "); Console.WriteLine("SampleSyncronized.Square is: {0}", (Int32)System.Threading.Thread.get_CurrentThread().GetHashCode()); return i * i; } //Square } //SampleSyncronized // The async delegate used to call a method with this signature asynchronously. /** @delegate */ public delegate int SampSyncSqrDelegate(int i); public class AsyncResultSample { static int value; // Asynchronous Callback method. public static void MyCallback(IAsyncResult ar) { // Obtains the last parameter of the delegate call. SampSyncSqrDelegate sampDelg = (SampSyncSqrDelegate)ar.get_AsyncState(); // Obtains return value from the delegate call using EndInvoke. AsyncResult aResult = (AsyncResult)ar; SampSyncSqrDelegate temp = (SampSyncSqrDelegate)(aResult.get_AsyncDelegate()); int threadId = AppDomain.GetCurrentThreadId(); int result = temp.EndInvoke(ar); Console.Write("Simple.SomeMethod (AsyncCallback): Result of "); Console.WriteLine("{0} in SampleSynchronized.Square is {1} ", (Int32)value, (Int32)result); } //MyCallback public static void main(String[] args) { int result; int param; // Creates an instance of a context-bound type SampleSynchronized. SampleSyncronized sampSyncObj = new SampleSyncronized(); // Checks whether the object is a proxy, since it is context-bound. if (RemotingServices.IsTransparentProxy(sampSyncObj)) { Console.WriteLine("sampSyncObj is a proxy."); } else { Console.WriteLine("sampSyncObj is NOT a proxy."); } param = 10; Console.WriteLine(""); Console.WriteLine("Making a synchronous call on the context-bound " + "object:"); result = sampSyncObj.Square(param); Console.Write("The result of calling sampSyncObj.Square with "); Console.WriteLine("{0} is {1}.", (Int32)param, (Int32)result); Console.WriteLine(""); SampSyncSqrDelegate sampleDelegate = new SampSyncSqrDelegate(sampSyncObj.Square); param = 8; value = param; Console.WriteLine("Making a single asynchronous call on the " + "context-bound object:"); IAsyncResult ar1 = sampleDelegate.BeginInvoke(param, new AsyncCallback(AsyncResultSample.MyCallback), sampleDelegate); Console.WriteLine("Waiting for the asynchronous call to complete..."); WaitHandle wh = ar1.get_AsyncWaitHandle(); wh.WaitOne(); Console.WriteLine(""); Console.WriteLine("Waiting for the AsyncCallback to complete..."); System.Threading.Thread.Sleep(1000); } //main } //AsyncResultSample

System.Runtime.Remoting.Messaging.AsyncResult


Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


AsyncResult プロパティ

名前 | 説明 | |
---|---|---|
![]() | AsyncDelegate | 非同期の呼び出しが行われたデリゲート オブジェクトを取得します。 |
![]() | AsyncState | BeginInvoke メソッドの呼び出しの最後のパラメータに指定されたオブジェクトを取得します。 |
![]() | AsyncWaitHandle | Win32 同期ハンドルをカプセル化し、各種の同期スキームを実装できるようにする WaitHandle を取得します。 |
![]() | CompletedSynchronously | BeginInvoke の呼び出しが同期的に完了したかどうかを示す値を取得します。 |
![]() | EndInvokeCalled | EndInvoke が現在の AsyncResult で呼び出されたかどうかを示す値を取得または設定します。 |
![]() | IsCompleted | サーバーが呼び出しを完了したかどうかを示す値を取得します。 |
![]() | NextSink | シンク チェイン内の次のメッセージ シンクを取得します。 |

AsyncResult メソッド

名前 | 説明 | |
---|---|---|
![]() | AsyncProcessMessage | IMessageSink インターフェイスを実装します。 |
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 ( Object から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 ( Object から継承されます。) |
![]() | GetReplyMessage | 非同期呼び出しの応答メッセージを取得します。 |
![]() | GetType | 現在のインスタンスの Type を取得します。 ( Object から継承されます。) |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。) |
![]() | SetMessageCtrl | ディスパッチされた後の非同期メッセージを制御できるようにする、現在のリモート メソッド呼び出しの IMessageCtrl を設定します。 |
![]() | SyncProcessMessage | リモート オブジェクトに対するメソッド呼び出しで返される応答メッセージを同期的に処理します。 |
![]() | ToString | 現在の Object を表す String を返します。 ( Object から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 ( Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 ( Object から継承されます。) |

AsyncResult メンバ
AsyncResult データ型で公開されるメンバを以下の表に示します。

名前 | 説明 | |
---|---|---|
![]() | AsyncDelegate | 非同期の呼び出しが行われたデリゲート オブジェクトを取得します。 |
![]() | AsyncState | BeginInvoke メソッドの呼び出しの最後のパラメータに指定されたオブジェクトを取得します。 |
![]() | AsyncWaitHandle | Win32 同期ハンドルをカプセル化し、各種の同期スキームを実装できるようにする WaitHandle を取得します。 |
![]() | CompletedSynchronously | BeginInvoke の呼び出しが同期的に完了したかどうかを示す値を取得します。 |
![]() | EndInvokeCalled | EndInvoke が現在の AsyncResult で呼び出されたかどうかを示す値を取得または設定します。 |
![]() | IsCompleted | サーバーが呼び出しを完了したかどうかを示す値を取得します。 |
![]() | NextSink | シンク チェイン内の次のメッセージ シンクを取得します。 |

名前 | 説明 | |
---|---|---|
![]() | AsyncProcessMessage | IMessageSink インターフェイスを実装します。 |
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 (Object から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 (Object から継承されます。) |
![]() | GetReplyMessage | 非同期呼び出しの応答メッセージを取得します。 |
![]() | GetType | 現在のインスタンスの Type を取得します。 (Object から継承されます。) |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。) |
![]() | SetMessageCtrl | ディスパッチされた後の非同期メッセージを制御できるようにする、現在のリモート メソッド呼び出しの IMessageCtrl を設定します。 |
![]() | SyncProcessMessage | リモート オブジェクトに対するメソッド呼び出しで返される応答メッセージを同期的に処理します。 |
![]() | ToString | 現在の Object を表す String を返します。 (Object から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 (Object から継承されます。) |

- AsyncResultのページへのリンク