実行時にタスクのリストを実行しようとしています。これを非同期操作にしたい。各タスクは Web サービスを呼び出し、リストに追加する応答を返します。すべての操作が完了したら、すべてを 1 つのドキュメントにマージします。
これが私のコードです。現在、同期呼び出しのみとして実行されています。一度に撃ってもらいたい。
List<XmlDocument> XmlResponse = new List<XmlDocument>();
XmlDocument xDocument = new XmlDocument();
ServiceRequest service = GetServiceRequest();
var tasks = new List<Task>();
Parallel.ForEach(service.IRN, x =>
{
tasks.Add(Task.Factory.StartNew(() =>
{
XmlDocument xRequest = BuildServiceRequest(
new ServiceRequest
{
AccountNumber = service.AccountNumber,
MemberId = service.MemberId,
IRN = new List<string> { x }
});
Debug.Print("Service Call " + DateTime.Now.ToString("hh.mm.ss.ffffff"));
XmlDocument xResponse = WebRequest.Submit(xRequest); // This is invoking service
XmlResponse.Add(xResponse);
}));
});
try
{
Task.WaitAll(tasks.Where(x => x != null).ToArray());
xDocument = PrepareServiceResponse();
Debug.Print("Task Ends" + DateTime.Now.ToString("hh.mm.ss.ffffff"));
}
ここでこのコードを実行すると、サービスが同期的に呼び出されます。タスクリストで一度にすべての通話を撃つ方法を誰か提案できますか?