我们有一个地址数据表,我试图对地理编码进行测试。为什么谷歌地理编码需要花费这么长时间使用DownloadStringAsync(Uri,Object)C#
然后我们遍历数据表行,使用WebClient.downloadStringAsync(Uri,Object)将api请求发送到Google Geocoding,并对数据表进行所述更新。
所有线程完成后,我们需要更新数据库。
为此,我们使用Task.Factory.StartNew函数并跟踪它们以等待所有任务完成。
我们在8000多个地址的超过10分钟内看到了这一点。
这是正常的还是有更好的方法呢?
任何建议表示赞赏。
下调代码是下面供参考:
DataTable dataTable = new DataTable();
String url = "https://maps.googleapis.com/maps/api/geocode/json?address={0}&key={1}";
List<Task> tasks = new List<Task>();
int i = 0;
foreach (DataRow row in dataTable.Rows) //8000 + rows
{
Uri uriWithAddress = new Uri(String.Format(url, new[] {
"full_address",
"apiKey"
}));
tasks.Add(Task.Factory.StartNew(() => {
using (System.Net.WebClient client = new System.Net.WebClient())
{
client.DownloadStringCompleted += (o, a) =>
{
//when finished... do some work like lock datatable
//and change some values etc
};
client.DownloadStringAsync(uriWithAddress, i);
i++;
}
}));
Task.WaitAll(tasks.ToArray());
看起来您似乎一次启动8,000个Web请求? –