对大量呼叫调用HTTPRequest需要很长时间

时间:2015-08-25 15:56:37

标签: c# asp.net http asynchronous

我必须拨打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).

我不知道这是否会影响我的问题,但在其他问题中搜索同样的问题之后,他们说我需要在此行之前禁用编译器消息。

0 个答案:

没有答案