加载页面然后处理Asp.net中的行

时间:2012-10-04 15:07:31

标签: asp.net ajax multithreading loading webpage

我有一个网页,是我公司的网站监控工具。基本上,它从数据库中提取150个IP地址的列表,并检查是否为它们加载了网页。这需要大约15分钟才能加载,我希望它能够加载列表并逐一进行,并使用文本或图标更新状态。

这是我的功能块,任何方式来解决这个问题或帮助我达到我需要达到的目的?

Function SiteMonitorResults(ByVal WebAddress As String)
    Try
        'Code Example

        Dim httpReq As HttpWebRequest = DirectCast(WebRequest.Create(WebAddress), HttpWebRequest)
        httpReq.AllowAutoRedirect = False

        Dim httpRes As HttpWebResponse = DirectCast(httpReq.GetResponse(), HttpWebResponse)
        ' Close the response.
        httpRes.Close()
        ' Code for NotFound resources goes here.
        If httpRes.StatusCode = HttpStatusCode.OK Then
            Return "Online"
        Else
            Return "Offline"
        End If
    Catch ex As Exception
        Return "Unknown"
    End Try

End Function

1 个答案:

答案 0 :(得分:1)

基本上,我会使用System.Threading.Tasks和System.Net.Http这样做。 (对不起C#代码)

我遗漏了try catch以获取可读性,但它们是必需的,否则代码将在第一个DNS问题上崩溃(例如)

    public string CheckAddresses(List<string> addresses)
    {
        List<string> result = new List<string>();
        List<Task> tasks = new List<Task>();
        addresses.ForEach(address =>
        {
            var task = new HttpClient().GetAsync(address).ContinueWith(
                res => result.Add(String.Format("{0} : {1}", address, res.Result.IsSuccessStatusCode)));
            tasks.Add(task);
        });
        Task.WaitAll(tasks.ToArray());

        return string.Join(", ", result.ToArray());
    }

希望这会有所帮助