我正在尝试了解 LINQ 如何处理线程。以下代码生成 ThreadStateException“线程尚未启动”。为什么会这样?
var threads = Enumerable.Range(0, 50).Select(x =>
{
Thread thread = new Thread(Method);
thread.Name = x.ToString();
return thread;
});
foreach (var thread in threads)
{
thread.Start();
}
foreach (var thread in threads)
{
thread.Join();
}
Console.WriteLine(j);
最佳答案
您的问题与线程无关。当第二次枚举 threads
时,您的查询将被第二次执行并创建第二组线程。
因此您.Start
一组线程,.Join
另一组。您需要急切地对查询求值一次,然后缓存结果。
IEnumerable<Thread> lazyThreads = Enumerable.Range(...
Thread[] threads=lazyThreads.ToArray();//Evaluate and store in an array
你也可以把它写成一条语句:
var threads = Enumerable.Range(1,50).Select(...).ToArray();
关于c# - LINQ 可枚举线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5433244/