【发布时间】:2018-04-16 09:28:02
【问题描述】:
场景:有一个请求和许多供应商,所以为了从我使用的所有供应商那里获取结果,
var supplierResults = suppliers.AsParallel()
.WithDegreeOfParallelism(suppliers.Count())
.Select(supplier => supplier.GetResponse(request, SuppliersRequestTimespan))
.ToArray();
Task.WaitAll(supplierResults);
哪个工作正常。
在另一个场景中,我有三个不同的请求,并希望同时将其发送给所有供应商(线程)。我只是尝试如下:
int TaskCount = 3;
var tasks = new Task[TaskCount];
tasks[0] = Task.Factory.StartNew(() => (suppliers.AsParallel()
.WithDegreeOfParallelism(suppliers.Count())
.Select(supplier => supplier.GetResponse(request1, SuppliersRequestTimespan))
.ToArray()));
tasks[1] = Task.Factory.StartNew(() => (suppliers.AsParallel()
.WithDegreeOfParallelism(suppliers.Count())
.Select(supplier => supplier.GetResponse(request2, SuppliersRequestTimespan))
.ToArray()));
tasks[2] = Task.Factory.StartNew(() => (suppliers.AsParallel()
.WithDegreeOfParallelism(suppliers.Count())
.Select(supplier => supplier.GetResponse(request3, SuppliersRequestTimespan))
.ToArray()));
Task.WaitAll(tasks);
但是,不幸的是,它没有“等待”响应。
GetResponse() 方法来自如下界面:
public interface ISupplier
{
Task<JObject> GetResponse(JObject request, TimeSpan timeout);
Task<JObject> GetResponseAsync(JObject request, TimeSpan timeout);
string GetSupplierBrand();
string GetSupplierCulture();
}
希望你们帮我完成这个..
【问题讨论】:
-
supplier.GetResponse() 方法是异步的吗?这会导致您的控件在所有实际任务未完成的情况下返回。此外, .ToArray() 似乎位于奇怪的位置。检查为什么你不能像那个有效的那样拥有它。
-
@HenkHolterman
GetResponse()来自如上图所示的界面。 -
你真的应该使用微软的响应式框架来处理这种事情。
标签: c# asp.net multithreading