【发布时间】:2015-07-13 08:02:37
【问题描述】:
在 c# 项目中,我正在对 web api 进行一些调用,问题是我在方法的循环中执行它们。通常没有这么多,但即使我正在考虑利用并行性。
到目前为止我正在尝试的是
public void DeployView(int itemId, string itemCode, int environmentTypeId)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(ConfigurationManager.AppSettings["ApiUrl"]);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var agents = _agentRepository.GetAgentsByitemId(itemId);
var tasks = agents.Select(async a =>
{
var viewPostRequest = new
{
AgentId = a.AgentId,
itemCode = itemCode,
EnvironmentId = environmentTypeId
};
var response = await client.PostAsJsonAsync("api/postView", viewPostRequest);
});
Task.WhenAll(tasks);
}
}
但是想知道这是否是正确的路径,或者我应该尝试并行整个 DeployView(即甚至在使用 HttpClient 之前)
现在我看到它发布了,我认为我不能只删除变量响应,只需执行等待而不将其设置为任何变量
谢谢
【问题讨论】:
-
其实这是一个很好的方向。但是你忘记了最重要的部分。您需要 await 结果,例如await Task.WhenAll 但您需要将“async”关键字添加到您的 DeployView 函数中。您最好深入了解async/await 范式。
-
那么您面临的问题/异常是什么?我也同意 ckruczek 的观点,你所采取的方向没有错……另外,你想得到回应吗?
-
我想得到答复,是的。但是如果它们都可以,不知道如何使用它们
-
"尝试并行整个 DeployItem" 什么意思?
-
@usr,我想知道是否重点是在任务本身中创建 htppclient。抱歉,我放了 DeployItem,它应该是 DeployView
标签: c# async-await task-parallel-library