【发布时间】:2016-06-28 13:36:19
【问题描述】:
我的 asp.net mvc-5 Web 应用程序中有以下方法:-
public async Task <List<Details>> Get()
{
Parallel.ForEach(resourcesinfo.operation.Details,new ParallelOptions { MaxDegreeOfParallelism = 20 }, (c) =>
{
ResourceAccountListInfo resourceAccountListInfo = new ResourceAccountListInfo();
using (WebClient wc = new WebClient())
{
string url = currentURL + "resources/" + c.RESOURCEID + "/accounts?AUTHTOKEN=" + pmtoken;
string tempurl = url.Trim();
var json = await wc.DownloadStringTaskAsync(tempurl);
resourceAccountListInfo = JsonConvert.DeserializeObject<ResourceAccountListInfo>(json);
}
//code goes here
但我收到此错误:-
“await”运算符只能在异步 lambda 表达式中使用。考虑用 'async' 修饰符标记这个 lambda 表达式
请问有人可以推荐吗?
【问题讨论】:
-
-
Parallel.Foreach不是为并行异步操作而设计的;它旨在并行化同步操作。你根本不应该使用它。 -
啊,正如@scottchamberlain 在我现在删除的答案中提到的那样,你不能。
Parallel.ForEach没有接受任务的重载。我想这里的主要问题是您正在混合来自两种不同范式(Tasks 和 Pfx)的异步操作模式。如果您正在处理async的东西,那么最好全力以赴。这是一些类似 C# 的伪代码,它说明了:Task.WaitAll(resourcesinfo.operation.Details.Select(x => CallAsyncMethod(x)).ToArray()) -
有许多有效的模式。这是一个起点。 weblogs.asp.net/cibrax/await-whenall-waitall-oh-my TPL 库听起来也不错。
标签: c# .net asp.net-mvc .net-4.5 parallel.foreach