|
■No60310 (KQ さん) に返信
各処理の区別をするためのクラス(実際にはなくてもよい)
public class NumAction
{
public int No;
public Action Act;
}
private void button1_Click(object sender, EventArgs e)
{
行う処理を10ほど追加(実際の処理をここでQueueに追加)
Queue<NumAction> TaskQue = new Queue<NumAction>();
for (int i = 0; i < 10; i++) {
TaskQue.Enqueue(new NumAction {No =i,Act = () => {
System.Threading.Thread.Sleep(500);
}});
}
並列処理部の処理
List<Action> ActList = new List<Action>();
Action act = () =>
{
NumAction Tsk;
do
{
lock (TaskQue)
{
Tsk = null;
if (TaskQue.Count > 0)
{
Tsk = TaskQue.Dequeue();
}
}
if (Tsk != null)
{
Console.WriteLine("Begin:" + Tsk.No);
Tsk.Act();
Console.WriteLine("End:" + Tsk.No);
}
} while (Tsk != null);
};
3つ並列なので3つ追加
ActList.Add(act);
ActList.Add(act);
ActList.Add(act);
並列実行
Parallel.ForEach(ActList, act2 => act2());
}
|