1 c# linq foreach multithreading enumerable.range
我试图理解LINQ如何处理线程.以下代码生成ThreadStateException"Thread尚未启动".为什么会这样?
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);
Run Code Online (Sandbox Code Playgroud)
您的问题与线程无关.枚举时threads第二次执行查询并创建第二组线程.
所以你有.Start一组线程,.Join另一组.您需要急切地评估查询一次,然后缓存结果.
IEnumerable<Thread> lazyThreads = Enumerable.Range(...
Thread[] threads=lazyThreads.ToArray();//Evaluate and store in an array
Run Code Online (Sandbox Code Playgroud)
您也可以将其编写为单个语句:
var threads = Enumerable.Range(1,50).Select(...).ToArray();
Run Code Online (Sandbox Code Playgroud)