如何将Parallel.ForEach方法与Dynamic对象一起使用
本文关键字:对象 Dynamic 一起 方法 Parallel ForEach | 更新日期: 2023-09-27 18:27:47
我已经使用Parallel.ForEach功能同时处理多个客户端,如下所示:
Clients objClient = new Clients();
List<Clients> objClientList = Clients.GetClientList();
Parallel.ForEach<Clients>(objClientList, list =>
{
SendFilesToClient(list);
});
但现在,我决定动态创建客户端对象,而不是创建一个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);
}
既然我没有使用Client类并动态生成对象,那么我如何使用Parallel.ForEach功能来同时处理动态对象中的多个客户端,就像我在使用类对象之前所做的那样?
希望我说清楚了。
此外,如果你能告诉我我的方法是否有问题,或者向我展示一种更好的方法,我将不胜感激。
既然我没有使用Client类并动态生成对象,那么我如何使用Parallel.ForEach功能来同时处理动态对象中的多个客户端,就像我在使用类对象之前所做的那样?
首先,将您的列表保留为List<T>
,不要将其声明为dynamic
:
List<dynamic> clients = new List<dynamic>();
然后你可以用同样的方式处理它们:
Parallel.ForEach(clients, client =>
{
// Use client as needed here...
});
如果必须将clients
声明为dynamic clients
,则可以使用:
Parallel.ForEach((IEnumerable<dynamic>)clients, client =>
{
//...