スレッド化はかなり新しいです。次のような状況があります。
class Program
{
static void Main(string[] args)
{
List<NewsItem> newsItems = new List<NewsItem>();
for (int i = 0; i < 5; i++)
{
NewsItem item = new NewsItem(i.ToString());
newsItems.Add(item);
}
List<Thread> workerThreads = new List<Thread>();
foreach (NewsItem article in newsItems)
{
Console.WriteLine("Dispatching: " + article.Headline);
Thread thread = new Thread(() =>
{
Console.WriteLine("In thread:" + article.Headline);
});
workerThreads.Add(thread);
thread.Start();
}
foreach (Thread thread in workerThreads)
{
thread.Join();
}
Console.ReadKey();
}
}
class NewsItem
{
public string Headline { get; set; }
public NewsItem(string headline)
{
Headline = headline;
}
}
実行すると、常に次のようになります。
Dispatching: 0
Dispatching: 1
Dispatching: 2
In thread: 2
Dispatching: 3
In thread: 3
In thread: 2
Dispatching: 4
In thread: 4
In thread: 4
つまり、スレッド パラメータは、私が期待するものではありません。
匿名のラムダ式の代わりに ParameterizedThreadStart デリゲートを使用することでこれを回避できると思いますが、なぜこれが機能するのか (または期待どおりに機能しないのか) を知りたいと思っています。
ありがとう!
スティーブ