私の生徒の一人がマルチスレッドを説明する例を作成するように求められました。私はこの擬似的な例を考え出しました。この擬似例はスレッドを生成し、ループしている間にランダムな回数とスリープを行います。私は各スレッドを識別するためにGuidを使用するDictionaryを介してこれらのスレッドを追跡しています。MultiThreadingの例 - 私は辞書をロックする必要があります
ディクショナリは、これらのスレッドを監視し、おそらくそれらを「強制終了」するために使用されるページで使用できます。
これは合理的に見えるん:
ここpublic class LongProcess
{
public static Dictionary<Guid, LongProcess> Monitor = new Dictionary<Guid, LongProcess>();
public Guid Id { get; set; }
public int Iterations { get; set; }//number of loops
public int SleepFactor { get; set; }//rest period while looping
public int CompletedIterations { get; set; }//number of completed loops
void Process()
{
for(var i = 0 ; i < Iterations; i++)
{
Thread.Sleep(1000*SleepFactor);
SleepFactor = new Random(DateTime.Now.Millisecond).Next(1, 5);
this.CompletedIterations++;
}
}
public void Start()
{
Monitor.Add(Id, this);
var thread = new Thread(new ThreadStart(Process));
thread.Start();
}
}
は、このクラスが使用される方法です:
var id = Guid.NewGuid();
var rnd = new Random(DateTime.Now.Millisecond);
var process = new LongProcess
{
Iterations = rnd.Next(5, 20),
SleepFactor = rnd.Next(1, 5),
Id = id
};
process.Start();
任意のアイデアをいただければ幸いです。
スレッド内で 'Dictionary'にアクセスしていないので、2番目のコードブロックがマルチスレッドで実行されている場合を除き、アクセスをロックする心配はありません。 –
私が得られる答えは、開発者の個人的な好みにあまりにも多すぎると思います。あなたのプログラムが動作していて、コードの特定の部分を改善したいのであれば、その部分をハイライトして一般的な質問をしてください。 – Churk
@Churk - この質問には何も間違いありません。個人的な好みの問題。 –