C# 如何对动态对象使用Parallel.ForEach方法
我曾经使用Parallel.ForEach功能beafore同时处理多个客户端,如下所示:C# 如何对动态对象使用Parallel.ForEach方法,c#,.net-4.0,parallel-processing,parallel.foreach,dynamicobject,C#,.net 4.0,Parallel Processing,Parallel.foreach,Dynamicobject,我曾经使用Parallel.ForEach功能beafore同时处理多个客户端,如下所示: Clients objClient = new Clients(); List<Clients> objClientList = Clients.GetClientList(); Parallel.ForEach<Clients>(objClientList, list => { SendFilesToClient(list); }); var xDoc = XD
Clients objClient = new Clients();
List<Clients> objClientList = Clients.GetClientList();
Parallel.ForEach<Clients>(objClientList, list =>
{
SendFilesToClient(list);
});
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);
}
Clients objClient=newclients();
List objClientList=Clients.GetClientList();
Parallel.ForEach(objClientList,list=>
{
SendFilesToClient(列表);
});
但是现在,我决定动态创建clients对象,而不是创建Client类,如下所示:
Clients objClient = new Clients();
List<Clients> objClientList = Clients.GetClientList();
Parallel.ForEach<Clients>(objClientList, list =>
{
SendFilesToClient(list);
});
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);
}
var xDoc=XDocument.Load(新的StreamReader(xmlPath+@“\client.xml”);
动态根=新的ExpandooObject();
Parse(root,xDoc.Elements().First());
动态客户端=新列表();
for(int i=0;i
既然我不使用客户机类并动态生成对象,那么如何使用Parallel.ForEach功能在动态对象中并发处理多个客户机,就像我在使用类对象之前所做的那样
希望我说清楚
此外,如果您能告诉我我的方法是否有问题,或者告诉我更好的方法,我将不胜感激
既然我不使用客户机类并动态生成对象,那么如何使用Parallel.ForEach功能在动态对象中并发处理多个客户机,就像我在使用类对象之前所做的那样
首先,将列表保留为列表
,不要将其声明为动态
:
List<dynamic> clients = new List<dynamic>();
如果必须将客户端
声明为动态客户端
,则可以使用:
Parallel.ForEach((IEnumerable<dynamic>)clients, client =>
{
//...
Parallel.ForEach((IEnumerable)客户端,客户端=>
{
//...
这是我尝试的第一件事,但我得到了这样一条消息:如果不先将lambda表达式强制转换为委托或表达式树类型,就不能将它用作动态调度对象的参数。@学习者-发布您尝试的确切代码,以及确切的错误消息。@Learner您不能使列表本身成为动态的-它必须是实现IEnumerable
以使其工作(或强制转换)。再次感谢您为动态类型提供解决方案。