【发布时间】:2015-07-30 03:14:16
【问题描述】:
我在使用任务/等待的 foreach 中有一些耗时的代码。 它包括从数据库中提取数据、生成 html、将其发布到 API 以及将回复保存到数据库。
模型看起来像这样
List<label> labels = db.labels.ToList();
foreach (var x in list)
{
var myLabels = labels.Where(q => !db.filter.Where(y => x.userid ==y.userid))
.Select(y => y.ID)
.Contains(q.id))
//Render the HTML
//do some fast stuff with objects
List<response> res = await api.sendMessage(object); //POST
//put all the responses in the db
foreach (var r in res)
{
db.responses.add(r);
}
db.SaveChanges();
}
在时间方面,生成 Html 并将其发布到 API 似乎需要花费大部分时间。
理想情况下,如果我可以为下一个项目生成 HTML,然后等待帖子完成,然后再发布下一个项目,那就太好了。
也欢迎其他想法。 怎么办?
我首先想到在foreach 上方添加一个Task 并等待它完成后再进行下一个 POST,但是我如何处理最后一个循环...感觉很乱...
【问题讨论】:
-
问:帖子真的必须按顺序发送吗? (整个有序部分正在序列化执行,否则有人可能会建议 Task.WaitAll 或类似 Parallel.For 的东西,这将允许并行执行。)
-
@user1778606 我不确定我是否要同时向 API 发送 1000 个 POST?顺序无所谓,但每次POST成功后,我需要尽快将其回复保存到数据库中。
-
@Stefanvds 您是否可以同时发出
Post请求并保存到数据库? -
@YuvalItzchakov 我需要尽快将 POST 的响应保存在数据库中。我将如何同时做这两个? :)
-
关于异步任务的并行方法的相当好的讨论stackoverflow.com/questions/11564506/…
标签: c# asp.net-mvc optimization async-await