我必须拨打100,000个网址,我不需要等待回复。我搜索了很多。有些人说没有办法在没有等待响应的情况下调用http请求,也很少有像我这样设置Method =“POST”的问题的答案。
以下是基于所有这些内容的源代码。我试图使用WhenAll异步调用URL。
问题在于,当我在任务管理器中看到CPU使用情况时,它会在140秒内完全忙碌,并且在这段时间内系统几乎无法使用。
protected async void btnStartCallWhenAll_Click(object sender, EventArgs e)
{
// Make a list of web addresses.
List<string> urlList = SetUpURLList(Convert.ToInt32(txtNoRecordsToAdd.Text));
// One-step async call.
await ProcessAllURLSAsync(urlList);
}
private async Task ProcessAllURLSAsync(List<string> urlList)
{
// Create a query.
IEnumerable<Task<int>> CallingTasksQuery =
from url in urlList select ProcessURLAsync(url);
// Use ToArray to execute the query and start the Calling tasks.
Task<int>[] CallingTasks = CallingTasksQuery.ToArray();
// Await the completion of all the running tasks.
int[] lengths = await Task.WhenAll(CallingTasks);
int total = lengths.Sum();
}
private async Task<int> ProcessURLAsync(string url)
{
await CallURLAsync(url);
return 1;
}
private async Task CallURLAsync(string url)
{
// Initialize an HttpWebRequest for the current URL.
var webReq = (HttpWebRequest)WebRequest.Create(url);
webReq.Method="POST";
// Send the request to the Internet resource and wait for the response.
Task<WebResponse> responseTask = webReq.GetResponseAsync() ;
}
private List<string> SetUpURLList(int No)
{
List<string> urls = new List<string>
{
};
for (int i = 1; i <= No; i++)
urls.Add("http://msdn.microsoft.com/library/windows/apps/br211380.aspx");
return urls;
}
顺便说一句,编译器暗示“这个异步方法缺少'等待'运算符并且将同步运行考虑使用await运算符来等待非阻塞api调用或等待task.run(..)来执行cpu绑定工作后台线程“为这一行:
private async Task CallURLAsync(string url).
我不知道这是否会影响我的问题,但在其他问题中搜索同样的问题之后,他们说我需要在此行之前禁用编译器消息。