4

次のように複数のクライアントを同時に処理するために、以前に 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 機能を使用して、クラス オブジェクトを使用する前に行っていたように、Dynamic Object 内の複数のクライアントを同時に処理するにはどうすればよいでしょうか?

私が自分自身を明確にしたことを願っています。

また、私のアプローチに何か問題があるかどうか教えていただければ幸いです。または、これを行うためのより良い方法を教えてください。

4

1 に答える 1

7

Client クラスを使用せずにオブジェクトを動的に生成するようになったので、Parallel.ForEach 機能を使用して、クラス オブジェクトを使用する前に行っていたように、Dynamic Object 内の複数のクライアントを同時に処理するにはどうすればよいでしょうか?

まず、リストを として保持し、次のように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 =>
{
   //...
于 2013-08-15T22:00:37.733 に答える