如何在Dynamic对象中使用Parallel.ForEach方法

Lea*_*ner 4 c# parallel-processing .net-4.0 dynamicobject parallel.foreach

我已经使用Parallel.ForEach功能来同时处理多个客户端,如下所示:

Clients objClient = new Clients();
List<Clients> objClientList = Clients.GetClientList();

Parallel.ForEach<Clients>(objClientList, list =>
{
    SendFilesToClient(list);
});
Run Code Online (Sandbox Code Playgroud)

但是现在,我没有创建Client类,而是决定动态创建客户端对象,如下所示:

var xDoc = XDocument.Load(new StreamReader(xmlPath + @"\client.xml"));
dynamic root = new ExpandoObject();

XmlToDynamic.Parse(root, xDoc.Elements().First());

dynamic clients = new List<dynamic>();

for (int i = 0; i < root.clients.client.Count; i++)
{
    clients.Add(new ExpandoObject());
    clients[i].Id = root.clients.client[i].id;
    clients[i].Name = root.clients.client[i].name;
    List<string> list = new List<string>();
    for (int j = 0; j < root.clients.client[i].emails.email.Count; j++)
    {
        list.Add(root.clients.client[i].emails.email[j].ToString());
    }
    clients[i].Email = string.Join(",", list);
}
Run Code Online (Sandbox Code Playgroud)

现在我不使用Client类并动态生成对象,如何使用Parallel.ForEach功能同时处理动态对象中的多个客户端,就像我以前使用类对象一样?

希望我清楚自己.

此外,如果您能告诉我我的方法是否有问题或者告诉我更好的方法,我将不胜感激.

Ree*_*sey 7

现在我不使用Client类并动态生成对象,如何使用Parallel.ForEach功能同时处理动态对象中的多个客户端,就像我以前使用类对象一样?

首先,将您的列表保存为List<T>,并且不要将其声明为dynamic:

List<dynamic> clients = new List<dynamic>();
Run Code Online (Sandbox Code Playgroud)

然后你可以用同样的方式处理它们:

Parallel.ForEach(clients, client =>
{
    // Use client as needed here...
});
Run Code Online (Sandbox Code Playgroud)

如果您必须离开clients声明dynamic clients,您可以使用:

Parallel.ForEach((IEnumerable<dynamic>)clients, client =>
{
   //...
Run Code Online (Sandbox Code Playgroud)