首页 > 解决方案 > AsParallel 写入同一个对象

问题描述

我有一个带有键值对的字典,其中值是一个复杂的对象。由于速度的原因,我使用了 AsParalle()。发生的问题是在我的一些返回对象中放置了其他键值对的多个结果。

例如:ResutDict 有多个键值对。

public IDictionary<string, IOutboundResult> ResultDict
{
  get { return m_ResultDict; }
  set { m_ResultDict = value; }
}

ResultDict.AsParallel()
          .WithDegreeOfParallelism(amountOfThreads)
          .ForAll(kvp => { DO YOUR THING AND RETURN OBJECT S_Out}

它们都应该返回一个对象。稍后将被序列化为 XML。

public class S_Out : ISerializable
{
    private List<details> detailField;

    [System.Xml.Serialization.XmlElement("details")]
    public List<details> details
    {
        get { return detailField; }
        set { detailField = value; }
    } 
}

public class details
{
        private string idField;       
        private string countryField;
        private string town_cityField;
        private string postcodeField;
        private List<extract> extractField;

    public string id
    {
        get { return idField; }
        set { idField = value; }
    }

    public string country
    {
        get { return countryField; }
        set { countryField = value; }
    }

    public string town_city
    {
        get { return town_cityField; }
        set { town_cityField = value; }
    }

    public string postcode
    {
        get { return postcodeField; }
        set { postcodeField = value; }
    }

    [XmlElement("extract")]
    public List<extract> extract
    {
        get { return extractField; }
        set { extractField = value; }
    }
}

此详细信息列表仅适用于其他一些情况,但在此特定情况下应仅包含一个详细信息。在并行期间,不同的线程在那里写入,因此在某些文件中我没有详细信息对象,而在其中一些文件中没有完整的详细信息列表。 它应该是一个 xml 文件的一个细节。有谁知道为什么会这样?在此处输入图像描述 在此处输入图像描述

标签: c#multithreading

解决方案


推荐阅读