gpt4 book ai didi

c# - LINQ 可枚举线程

转载 作者:太空宇宙 更新时间:2023-11-03 17:13:51 25 4
gpt4 key购买 nike

我正在尝试了解 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com