4

객체로 Parallel.ForEach 방법을 사용하는 방법 :동적 I는 다음과 같이 동시에 여러 클라이언트를 처리 할 Parallel.ForEach 기능 beafore을 사용했다

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

, 어떻게 사용 나는 동시에 동적 객체에 여러 클라이언트를 처리 할 Parallel.ForEach 기능을 사용 할 클래스 객체를 사용하기 전에 할 일?

희망 나는 나 자신을 분명히했다.

또한 내 접근 방식에 문제가 있는지 알려주거나이 방법을 더 잘 보여 주시면 감사하겠습니다.

답변

6

이제 클라이언트 클래스를 사용하지 않고 동적으로 개체를 생성 했으므로 클래스 개체를 사용하기 전에 Parallel.ForEach 기능을 사용하여 동적 개체의 여러 클라이언트를 동시에 처리 할 수 ​​있습니까?

첫째, List<T>로 목록을 유지하고 dynamic로 선언하지 않습니다

Parallel.ForEach(clients, client => 
{ 
    // Use client as needed here... 
}); 

당신이해야하는 경우 :

List<dynamic> clients = new List<dynamic>(); 

그런 다음 당신이 그 (것)들에게 같은 방법으로 처리 할 수 ​​있습니다 clientsdynamic clients으로 지정하면 다음을 사용할 수 있습니다.

Parallel.ForEach((IEnumerable<dynamic>)clients, client => 
{ 
    //... 
+0

내가 처음 시도한 것이지만이 메시지가 있습니다. 람다 식을 먼저 대리자 또는 식 트리 형식으로 캐스팅하지 않고 동적으로 전달 된 개체에 대한 인수로 사용할 수 없습니다. – Learner

+0

@Learner - 시도한 정확한 코드와 정확한 오류 메시지를 게시하십시오. –

+0

@Learner 목록 자체를 동적으로 만들 수는 없습니다. 목록 자체를 동적으로 만들 수는 없습니다. 목록 자체가 작동하도록 (또는 캐스트하기 위해) IEnumerable 을 구현해야합니다. –

관련 문제