Asp.net 在执行异步请求时,如何向waithandle.waitany发送信号?

Asp.net 在执行异步请求时,如何向waithandle.waitany发送信号?,asp.net,multithreading,asynchronous,Asp.net,Multithreading,Asynchronous,我使用以下示例代码使用异步请求获取一些HTML页面 我不想等到使用WaitHandle.WaitAll的每个请求都完成,只想等到找到正确的值。我目前正以这种方式进行操作,但将ManualResetEvents发送到线程时感觉不对劲。是否应该这样做?有更好的办法吗 public static void runprogram() { System.Net.ServicePointManager.DefaultConnectionLimit = 20;

我使用以下示例代码使用异步请求获取一些HTML页面

我不想等到使用WaitHandle.WaitAll的每个请求都完成,只想等到找到正确的值。我目前正以这种方式进行操作,但将ManualResetEvents发送到线程时感觉不对劲。是否应该这样做?有更好的办法吗

    public static void runprogram()
    {

        System.Net.ServicePointManager.DefaultConnectionLimit = 20;
        FetchPageDelegate del = new FetchPageDelegate(FetchPage);
        List<HtmlDocument> htmllist = new List<HtmlDocument>();
        List<IAsyncResult> results = new List<IAsyncResult>();
        List<WaitHandle> waitHandles = new List<WaitHandle>();
        List<ManualResetEvent> handles = new List<ManualResetEvent>();

        for (int i = 0; i < 20; i++)
        {
            ManualResetEvent e = new ManualResetEvent(false);
            handles.Add(e);
        }

        for(int i = 0; i < 200; i += 10)
        {
            int y = 0;
            string url = @"URLTOPARSE" + i;
            IAsyncResult result = del.BeginInvoke(url, handles[y], null, null);
            results.Add(result);
            waitHandles.Add(result.AsyncWaitHandle);

            y++;
        }
        //Here i check for a signal
        WaitHandle.WaitAny(handles.ToArray());

        //WaitHandle.WaitAll(waitHandles.ToArray());

        foreach (IAsyncResult async in results)
        {

           FetchPageDelegate delle = (async as AsyncResult).AsyncDelegate as FetchPageDelegate;
           HtmlDocument htm = delle.EndInvoke(async);

            if(htm.DocumentNode.InnerHtml.Contains("ANYTHING TO CHECK FOR(ONLY A TEST"))
            { 
                return;
            }
        }
    }
publicstaticvoid运行程序()
{
System.Net.ServicePointManager.DefaultConnectionLimit=20;
FetchPageDelegate=新的FetchPageDelegate(FetchPageDelegate);
List htmlist=新列表();
列表结果=新列表();
List waitHandles=new List();
列表句柄=新列表();
对于(int i=0;i<20;i++)
{
ManualResetEvent e=新的ManualResetEvent(错误);
添加(e);
}
对于(int i=0;i<200;i+=10)
{
int y=0;
字符串url=@“URLTOPARSE”+i;
IAsyncResult result=del.BeginInvoke(url,句柄[y],null,null);
结果。添加(结果);
添加(result.AsyncWaitHandle);
y++;
}
//我在这里检查信号
WaitHandle.WaitAny(handles.ToArray());
//WaitHandle.WaitAll(waitHandles.ToArray());
foreach(结果中的IAsyncResult异步)
{
FetchPageDelegate delle=(异步作为AsyncResult)。AsyncDelegate作为FetchPageDelegate;
HtmlDocument htm=delle.EndInvoke(异步);
if(htm.DocumentNode.InnerHtml.Contains(“要检查的任何内容(仅测试)))
{ 
返回;
}
}
}

您应该改用TPL和
任务类;它更容易使用。@SLaks告诉我更多,有链接吗?