【发布时间】:2014-10-06 23:01:22
【问题描述】:
我有一个选定的 contentIds 列表,对于每个内容 ID,我需要调用一个 api,获取响应,然后将收到的每个内容的响应保存在 DB 中。
用户一次可以选择 1-1000 范围内的任意数量的内容,并且可以在从 api 获得响应后传递此内容以更新内容数据库详细信息。
在这种情况下,我最终会为每个内容创建多个请求。
我想继续进行asp.net async Task 操作,然后写了下面这个方法。
我写的代码目前为每个 contentId 创建了一个任务,最后我正在等待所有任务得到响应。
Task.WaitAll(allTasks);
public static Task<KeyValuePair<int, string>> GetXXXApiResponse(string url, int contentId)
{
var client = new HttpClient();
return client.GetAsync(url).ContinueWith(task =>
{
var response = task.Result;
var strTask = response.Content.ReadAsStringAsync();
strTask.Wait();
var strResponse = strTask.Result;
return new KeyValuePair<int, string>(contentId, strResponse);
});
}
我现在正在考虑为我创建的每个任务创建一个线程,然后由于工作线程的数量有限,这种方法最终会占用所有线程,这是我不希望发生的。
谁能帮助/指导我如何有效地处理这种情况,即处理多个 api 请求或使用异步任务等的批处理类型?
仅供参考:我正在使用 .NET 框架 4.5
【问题讨论】:
-
您使用哪个版本的 C# 和 .Net?
-
你没有使用
await有什么原因吗?
标签: c# asp.net multithreading task-parallel-library async-await