1

処理する必要がある 10 個のアイテムのリストがあり、各アイテムは個別のスレッドを使用しています。コードは次のようになります。

foreach (Item item in items)
{
    Thread t = new Thread(() =>
    {
        ProcessItem(item);
    });
    t.Start();
}

また、スレッドを一時停止する必要があります (1 秒からスレッドの実行にかかる時間を引いた時間)。この場合、Thread.Sleep を使用する必要がありますか?

4

5 に答える 5

5

スレッドの手動処理をスキップしてもかまわない場合は、次の行で目的どおりに動作するはずです。

Parallel.ForEach(items, ProcessItem);

または、それぞれを処理する前にスリープします (ただし、あまり意味がありません)。

Parallel.ForEach(items, item => { Thread.Sleep(1000); ProcessItem(item); });
于 2013-10-21T12:20:29.857 に答える
0

Thread.Join他のスレッドが作業を完了するのを待つために使用します。

Thread.Sleep基本的に、指定されたミリ秒数だけ待機します

Thread.Sleep確かに副作用があり、お勧めできません。

あなたの文脈で注意すべきいくつかの点:

  1. 使用可能なスレッドがなくなった場合 (数がitems増えた場合)
  2. スレッドはいくつかの共有リソースにアクセスしますか?

ThreadPoolingとのthread-safe操作も確認してください。

于 2013-10-21T12:20:49.057 に答える
0

スレッドを開始するためのコードは正常に見えます。

Thread.Sleep(duration in milliseconds)スレッドを一定時間一時停止させるために使用する必要があります。

Join参加するスレッドが処理を完了するまで、現在のスレッドを停止します。

于 2013-10-21T12:20:59.533 に答える
0

何らかの理由で を使用したくない場合は、次を使用しますParallel.ForEach

Thread[] threads = new Thread[10];
int count = 0;
foreach (Item item in items)
{
    Thread t = new Thread(() =>
    {
        ProcessItem(item);
    });
    t.Start();
    threads[count++]=t;
}
for (int i=0;i<10;++i)
    threads[i].Join();
于 2013-10-21T12:24:36.953 に答える