C# 并行Web服务循环跳过
我使用并行循环来调用Web服务,因为单个for循环太慢。但是,结果显示跳过了部分项目 代码: 但结果是C# 并行Web服务循环跳过,c#,web-services,C#,Web Services,我使用并行循环来调用Web服务,因为单个for循环太慢。但是,结果显示跳过了部分项目 代码: 但结果是 3 8581892 41.10 1 9281989 10.99 50 4199289 02.22 它杂乱无章,而且丢失了很多数据 如何使其有序并确保所有数据都被表示出来?您是否应该期望Literal1.Text+=…是线程安全的还不清楚。我建议您使用Parallel.For循环来收集数据,然后更改Literal1.Text 例如,您可以编写: var results = new Whatev
3 8581892 41.10
1 9281989 10.99
50 4199289 02.22
它杂乱无章,而且丢失了很多数据
如何使其有序并确保所有数据都被表示出来?您是否应该期望
Literal1.Text+=…
是线程安全的还不清楚。我建议您使用Parallel.For
循环来收集数据,然后更改Literal1.Text
例如,您可以编写:
var results = new WhateverType[phoneNo.Count];
Parallel.For(0, phoneNo.Count,
index => results[index] = webserviceClass123.callWebserviceMethod(phoneNo[index]));
var builder = new StringBuilder();
for (int i = 0; i < phoneNo.Count; i++)
{
builder.AppendFormat("{0} {1} {2}<br/>",
i, phoneNo[i], results[i]);
}
Literal1.Text = builder.ToString();
var results=newwhatevertype[phoneNo.Count];
对于(0,电话号码计数,
index=>results[index]=webserviceClass123.callWebserviceMethod(phoneNo[index]);
var builder=新的StringBuilder();
for(int i=0;i ”,
i、 电话号码[i],结果[i];
}
Literal1.Text=builder.ToString();
使用并行LINQ可能更干净:
var results = phoneNo
.AsParallel()
.Select(number => new {
number,
result = webserviceClass123.callWebserviceMethod(number)
})
.AsOrdered()
.ToList()
var builder = new StringBuilder();
foreach (int i = 0; i < results.Count; i++)
{
builder.AppendFormat("{0} {1} {2}<br/>",
i, result[i].number, results[i].result);
}
Literal1.Text = builder.ToString();
var results=phoneNo
.天冬酰胺()
.选择(编号=>新建{
数字,
结果=webserviceClass123.callWebserviceMethod(编号)
})
.AsOrdered()
托利斯先生()
var builder=新的StringBuilder();
foreach(int i=0;i ”,
i、 结果[i]。编号,结果[i]。结果);
}
Literal1.Text=builder.ToString();
您正在编写什么样的应用程序?(WinForms、WPF、ASP.NET等?)我尝试了第二个示例,但得到了一个错误,因为Ordered只能在AsParallel、ParallelEnumerable.Range或ParallelEnumerable.Repeat的结果上调用。我尝试了第一个示例,并对其进行了一些编辑,结果成功了。但我想试试第二个,但不知道怎么做works@Bloopie:我建议您搜索并行LINQ教程
var results = new WhateverType[phoneNo.Count];
Parallel.For(0, phoneNo.Count,
index => results[index] = webserviceClass123.callWebserviceMethod(phoneNo[index]));
var builder = new StringBuilder();
for (int i = 0; i < phoneNo.Count; i++)
{
builder.AppendFormat("{0} {1} {2}<br/>",
i, phoneNo[i], results[i]);
}
Literal1.Text = builder.ToString();
var results = phoneNo
.AsParallel()
.Select(number => new {
number,
result = webserviceClass123.callWebserviceMethod(number)
})
.AsOrdered()
.ToList()
var builder = new StringBuilder();
foreach (int i = 0; i < results.Count; i++)
{
builder.AppendFormat("{0} {1} {2}<br/>",
i, result[i].number, results[i].result);
}
Literal1.Text = builder.ToString();