代码之家  ›  专栏  ›  技术社区  ›  bufferz

用于与空对象同步

  •  1
  • bufferz  · 技术社区  · 14 年前

    我在用 System.Threading.Tasks.Parallel.For 做一些重量级的处理。

    我的代码是:

    int count = 10;
    List<MyObj> results = new List<MyObj>();
    
    Parallel.For(0, count, (index) =>
    {
       MyObj obj = GetMyObjMaybe();
    
       if (obj != null)
          results.Add(obj);
    });
    
    if (results.Contains(null))
    {
       //break here, and it does
    }
    
    //sometimes contains null objects
    return results;
    }
    

    我不希望在列表中变成空的,但我是。我一定是搞砸了 index 不知怎么的。有什么想法吗?

    1 回复  |  直到 14 年前
        1
  •  6
  •   Henk Holterman    14 年前

    你的 List<MyObj> results 线程安全。

    你看到的是空的,因为 results 可能在很多方面无效。

    要么使用 Thread-safe collection class 结果 你自己和一个 lock