Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在集合上使用c#中的收益率仍然可以';不要更新我的收藏 静态列表编号=新列表(); 静态void Main(字符串[]参数) { foreach(GetNumbers()中的变量编号) { 如果(数字==1) { 线程t=新线程(()=> { 增加(234567); }); t、 Start(); } 控制台写入线(编号); } } 公共静态IEnumerable GetNumbers() { 对于(inti=0;i_C#_Multithreading_Linq_Ienumerable_Yield Return - Fatal编程技术网

在集合上使用c#中的收益率仍然可以';不要更新我的收藏 静态列表编号=新列表(); 静态void Main(字符串[]参数) { foreach(GetNumbers()中的变量编号) { 如果(数字==1) { 线程t=新线程(()=> { 增加(234567); }); t、 Start(); } 控制台写入线(编号); } } 公共静态IEnumerable GetNumbers() { 对于(inti=0;i

在集合上使用c#中的收益率仍然可以';不要更新我的收藏 静态列表编号=新列表(); 静态void Main(字符串[]参数) { foreach(GetNumbers()中的变量编号) { 如果(数字==1) { 线程t=新线程(()=> { 增加(234567); }); t、 Start(); } 控制台写入线(编号); } } 公共静态IEnumerable GetNumbers() { 对于(inti=0;i,c#,multithreading,linq,ienumerable,yield-return,C#,Multithreading,Linq,Ienumerable,Yield Return,即使你在使用收益率,你也在使用收益率内部 声明: 对一个列表执行多个读取操作是安全的,但是 如果在读取集合时对其进行修改,则可能会出现问题 这是这里最基本的问题——你在给它写信的时候正在阅读这个收藏(正如foreach所证明的那样)。这是不允许的 这可能值得一读: 您可能想考虑使用并发包、并发队列或并发堆栈作为备选方案。 ,即使您使用的是收益率,您也在使用它内前文。< /P> 声明: 对一个列表执行多个读取操作是安全的,但是 如果在读取集合时对其进行修改,则可能会出现问题 这是这里最基本的问题—

即使你在使用收益率,你也在使用收益率内部

声明:

对一个列表执行多个读取操作是安全的,但是 如果在读取集合时对其进行修改,则可能会出现问题

这是这里最基本的问题——你在给它写信的时候正在阅读这个收藏(正如foreach所证明的那样)。这是不允许的

这可能值得一读:


您可能想考虑使用并发包、并发队列或并发堆栈作为备选方案。

,即使您使用的是收益率,您也在使用它<强>内<强>前文。< /P> 声明:

对一个列表执行多个读取操作是安全的,但是 如果在读取集合时对其进行修改,则可能会出现问题

这是这里最基本的问题——你在给它写信的时候正在阅读这个收藏(正如foreach所证明的那样)。这是不允许的

这可能值得一读:


您可能想考虑使用并发包、并发队列或并发堆栈作为备选方案。

需要将对象和实例发送到线程。因此使用Stask.BeginInvoke(StestObjor)应该使你的代码不是线程安全的,所以修复产量问题是徒劳的。你确实提供了一个很好的MCVE,但幸运的是,这是一个。尝试描述在你的实际情况下的约束。而不是使用<代码>列表< /代码>,你可能想考虑使用<代码>队列< /代码>(<代码> CONTRONGROUND队列)。。您可以通过使用
Pop
对队列进行迭代来测试队列中是否有新项目,消费者可以
Push
对队列进行更改:您需要将对象的和实例发送到线程。因此,请使用start.BeginInvoke(stateobject)应该使你的代码不是线程安全的,所以修复产量问题是徒劳的。你确实提供了一个很好的MCVE,但幸运的是,这是一个。尝试描述在你的实际情况下的约束。而不是使用<代码>列表< /代码>,你可能想考虑使用<代码>队列< /代码>(<代码> CONTRONGROUND队列)。。您可以使用
Pop
对队列进行迭代时测试队列中是否有新项目,消费者可以
Push
对队列进行更改:这是否有助于@YogeshJoshi?这是否有助于@YogeshJoshi?
 static List<int> numbers = new List<int>();
    static void Main(string[] args)
    {

        foreach(var number in GetNumbers())
        {
            if (number == 1)
            {
                Thread t = new Thread(() => 
                {
                    numbers.Add(234567);
                });
                t.Start();
            }
            Console.WriteLine(number);
        }

    }



    public static IEnumerable<int> GetNumbers()
    {

        for(int i =0; i <=10;i++)
        {
            numbers.Add(i);
        }
        foreach (var number in numbers)
        {
            yield return number;
        }            

    }