【问题标题】:How to use Parallel.ForEach method with Dynamic objects如何将 Parallel.ForEach 方法与动态对象一起使用
【发布时间】:2013-08-15 21:55:19
【问题描述】:

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

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);
}

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

希望我说清楚了。

另外,如果您能告诉我我的方法是否有问题或告诉我一个更好的方法,我将不胜感激。

【问题讨论】:

    标签: c# .net-4.0 parallel-processing parallel.foreach dynamicobject


    【解决方案1】:

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

    首先,将您的列表保留为List&lt;T&gt;,不要将其声明为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 =>
    {
       //...
    

    【讨论】:

    • 这是我尝试的第一件事,但我收到了这条消息:Cannot use lambda expression as a argument to a argument to a dynamic dispatched object without first cast to a delegate or expression tree type.
    • @Learner - 发布您尝试过的确切代码,以及确切的错误消息。
    • @Learner 你不能让列表本身动态化 - 它必须是实现 IEnumerable&lt;T&gt; 的东西才能工作(或强制转换)。
    • 再次感谢您提供动态类型的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多