private void button1_Click(object sender, EventArgs e) { int iIdx = 0; Task.Run(() => { for (;;) { iIdx++; Task.Run(() => { My_Func(iIdx); }); Console.WriteLine("処理1"); Console.WriteLine("処理2"); Thread.Sleep(10); } }); } void My_Func(int iIdx) { Console.WriteLine(iIdx.ToString()); Thread.Sleep(20000); }
上のコードで質問です。
やりたいことは、別スレッド(スレッドA)で無限ループさせて My_Func()はまた別のスレッド(スレッドB)で実行します。
「処理1」, 「処理2」は毎回実行。My_Func()は処理が終わるまで新しく実行しない。
自分で考えたのが、スレッドBの同時実行回数を制限すればいいのかなと思ったのですが、そのやり方が分かりません。
どこを修正、追加したらいいでしょうか。
よろしくお願いいたします。
追記
実現実行順序は
以下をループ
↓
My_Func()が実行中ではなかったら
My_Func()を別スレッドで実行。
↓
処理1
↓
処理2
→ → → ↑
実行結果は
1
処理1
処理2
処理1
処理2
処理1
処理2
処理1
処理2
99999 ← ここの数字はなんでもいい
処理1
処理2
処理1
処理2
処理1
処理2
処理1
処理2
99999 ← ここの数字はなんでもいい
こうなってほしいです。
説明が下手ですみません。