我有一个简单的控制台应用程序,我想在其中循环调用许多 Url 并将结果放入数据库表中。我正在使用 .Net 4.5 并使用异步 i/o 来获取 URL 数据。这是我正在做的事情的简化版本。除数据库操作外,所有方法都是异步的。大家看到这个有什么问题吗?有没有更好的优化方法?
private async Task Run(){
var items = repo.GetItems(); // sync method to get list from database
var tasks = new List<Task>();
// add each call to task list and process result as it becomes available
// rather than waiting for all downloads
foreach(Item item in items){
tasks.Add(GetFromWeb(item.url).ContinueWith(response => { AddToDatabase(response.Result);}));
}
await Task.WhenAll(tasks); // wait for all tasks to complete.
}
private async Task<string> GetFromWeb(url) {
HttpResponseMessage response = await GetAsync(url);
return await response.Content.ReadAsStringAsync();
}
private void AddToDatabase(string item){
// add data to database.
}