zoukankan      html  css  js  c++  java
  • Parallel.ForEach 多线程 声明失败 "未将对象引用设置到对象的实例"

    x

    using System;
    using System.Collections.Generic;
    
    namespace Parallel.ForEach
    {
        class Program
        {
            //代码结构应该都是这样的吧...但是实际环境中方法Test中的逻辑要复杂很多的...
            static void Main(string[] args)
            {
                //测试数据...
                List<int> intList = new List<int>();
                for (int i = 0; i < 20; i++)
                {
                    intList.Add(i);
                }
    //问题在于执行这个方法的时候报错... System.Threading.Tasks.Parallel.ForEach(intList, (iModel)
    => { Test(iModel); }); } /// <summary> /// 这里仅仅是测试方法,实际中的这个方法逻辑比较复杂... /// </summary> /// <param name="i"></param> public static void Test(int i) {         int tempI = 0;//当MaxDegreeOfParallelism设置为3或者以上的时候,就会报错,调试-添加并行监视-会看到"tempI"有几次是没有声明的...{当前上下文中不存在名称“tempI”}
                tempI = i + 1;
                Console.WriteLine(tempI); } } }

    刚开始搜还没搜到咋回事...多线程确实鄙人用的比较少。。。哈哈。。。

    结果终于在csdn上看到了结果方案,一个常年活跃在csdn论坛上老前辈给出了正确答案...传送门

    private static object LockFlag = new object();
    
    然后读写变量的时候都要使用它互斥,例如
    lock(LockFlag)
    {
        var x = ListInfo[i];
        ListInfo.Remove(x);
    }

    以后记住了,多线程,要记得Lock...Lock...

    x

  • 相关阅读:
    strcpy
    Apple Swift中英文开发资源集锦[apple swift resources]
    c/c++指针总结[pointer summary]
    TestPointer
    66. 有序数组构造二叉搜索树[array to binary search tree]
    HDU 2112 HDU Today
    HDU 3790 最短路径问题
    HDU 2544 最短路
    模拟赛 Problem 3 经营与开发(exploit.cpp/c/pas)
    模拟赛 Problem 2 不等数列(num.cpp/c/pas)
  • 原文地址:https://www.cnblogs.com/love-zf/p/8014459.html
Copyright © 2011-2022 走看看