5b08 (cache) C# delegateを使ったマルチスレッド - 為せば成る・・・かもしれない

C# delegateを使ったマルチスレッド

| コメント(127) | トラックバック(1)


C#でマルチスレッドを書く方法はいくつかありますが、個人的にお気に入りの方法が
delegateを使ったものです。
なぜならば
・引数を渡せる
・返り値を受け取れる

System.Threading.Threadでは、クラス変数を使った受け渡しになってしまうので・・・。

実際の例は


private delegate int AddFuncDelegate(int a, int b);

void main() {
  AddFuncDelegate afd = addFunc;
  IAsyncResult iar = afd.BeginInvoke(1, 2, null, null);
 
  while(true) {
    if(iar.IsCompleted) {
      break;
    }
    System.Threading.Thread.Sleep(100);
    System.Windows.Forms.Application.DoEvents();
  }
  int ret = afd.EndInvoke(iar);

  Console.WriteLine("addFunc Return: {0}", ret );
}

private int addFunc(int a, int b) {
  int ret = a + b;
  System.Threading.Thread.Sleep(1000 * 10) // 10秒
  return ret;
}

こんな感じになります。

以前は25スレッドまでの制限上、あまり使われることは無かったのですが
(http://d.hatena.ne.jp/akiramei/20060123/p1)
現在はこの問題が解決
(http://www.infoq.com/jp/news/2008/05/ThreadPool)
して、250スレッドまで管理できるので、気にしなくて大丈夫かと。

あなたも今日からマルチスレッドプログラミング!

トラックバック(1)

C# delegateを使ったマルチスレッド上記ページが、Google2位&nb... 続きを読む

コメントする

OpenID対応しています OpenIDについて
0