ループ内の多くの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.
}