Advertisement
Guest User

Untitled

a guest
Mar 27th, 2017
28
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.05 KB | None | 0 0
  1. // 名前空間の登録
  2. using System; // 共通データ型と基本クラス(System名前空間)
  3. using System.Runtime.Remoting.Messaging; // AsyncResultクラス(System.Runtime.Remoting.Messaging名前空間)
  4. using System.Threading; // マルチスレッド(System.Threading名前空間)
  5.  
  6. // デリゲートの定義.
  7. delegate int AsyncronousFuncDelegate(int a, int b); // 引数がint型a, bで, 戻り値がintな関数を持つデリゲートAsyncronousFuncDelegate.
  8.  
  9. // MainClassの定義
  10. class MainClass
  11. {
  12. // Mainメソッドの定義
  13. static void Main()
  14. {
  15.  
  16. // 非同期処理で実行するデリゲートasyncronousFuncの生成.
  17. AsyncronousFuncDelegate asyncronousFunc = new AsyncronousFuncDelegate(AsyncronousFunc); // AsyncronousFuncを非同期実行するAsyncronousFuncDelegateオブジェクトasyncronousFuncを生成.
  18.  
  19. // 非同期処理の完了後に実行するAsyncCallbackデリゲートcallbackの生成.
  20. AsyncCallback callback = new AsyncCallback(AsyncCallbackFunc); // 非同期処理完了後にAsyncCallbackFuncを実行するAsyncCallbackオブジェクトcallbackを生成.
  21.  
  22. // 非同期処理の実行.
  23. IAsyncResult iar = asyncronousFunc.BeginInvoke(10, 20, callback, null); // コンパイラによって生成されたasyncronousFunc.BeginInvokeで非同期実行し, 戻り値のIAsyncResultオブジェクトをiarに格納.(引数として10, 20を渡し, さらに非同期実行完了後のコールバック関数callbackを渡す.)
  24.  
  25. // "AsyncronousFunc..."と出力.
  26. Console.WriteLine("AsyncronousFunc..."); // Console.WriteLineで"AsyncronousFunc..."と出力.
  27.  
  28. // Main側がすぐ終わってしまうので, 何かキーが入力されるまで待つ.
  29. Console.ReadKey(); // Console.ReadKeyで入力されるまで待つ.
  30.  
  31. }
  32.  
  33. // 非同期処理スタティックメソッドAsyncronousFunc.
  34. static int AsyncronousFunc(int a, int b)
  35. {
  36.  
  37. // 3秒休止.
  38. Thread.Sleep(3000); // Thread.Sleepで3秒休止.
  39.  
  40. // aとbの足した結果を返す.
  41. return a + b; // a + bを返す.
  42.  
  43. }
  44.  
  45. // 非同期処理完了後のスタティックコールバックメソッドAsyncCallbackFunc.
  46. static void AsyncCallbackFunc(IAsyncResult ar)
  47. {
  48.  
  49. // IAsyncResult型arをAsyncResultにキャスト.
  50. AsyncResult asyncRes = (AsyncResult)ar; // arをAsyncResult型asyncResにキャスト.
  51.  
  52. // 非同期処理で使ったデリゲートを取得.
  53. AsyncronousFuncDelegate asyncronousFunc = (AsyncronousFuncDelegate)asyncRes.AsyncDelegate; // asyncRes.AsyncDelegateをキャストしてasyncronousFuncを取得.
  54.  
  55. // 非同期処理の結果を取得.(非同期処理は完了してるのですぐ終わる.)
  56. int result = asyncronousFunc.EndInvoke(ar); // asyncronousFunc.EndInvokeで結果resultを取得.
  57.  
  58. // 結果の出力.
  59. Console.WriteLine("result = " + result); // Console.WriteLineでresultを出力.
  60.  
  61. }
  62.  
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement