いくつかの作業を行うためにスレッドを生成する主なタスクがあります。作業が完了すると、コンソールに書き込みます。
私の問題は、後で作成されたスレッドの一部が、以前に作成されたスレッドよりも速く終了することです。ただし、スレッドが作成されたのとまったく同じ順序でコンソールに書き込む必要があります。
そのため、スレッドがタスクを完了し、以前のスレッドが完了していない場合、それらの以前のスレッドも完了するまで待機する必要があります。
public class DoRead
{
public DoRead()
{
}
private void StartReading()
{
int i = 1;
while (i < 10000)
{
Runner r = new Runner(i, "Work" + i.ToString());
r.StartThread();
i += 1;
}
}
}
internal class Runner : System.IDisposable
{
int _count;
string _work = "";
public Runner(int Count, string Work)
{
_count = Count;
_work = Work;
}
public void StartThread()
{
ThreadPool.QueueUserWorkItem(new WaitCallback(runThreadInPool), this);
}
public static void runThreadInPool(object obj)
{
((Runner)obj).run();
}
public void run()
{
try
{
Random r = new Random();
int num = r.Next(1000, 2000);
DateTime end = DateTime.Now.AddMilliseconds(num);
while (end > DateTime.Now)
{
}
Console.WriteLine(_count.ToString() + " : Done!");
}
catch
{
}
finally
{
_work = null;
}
}
public void Dispose()
{
this._work = null;
}
}