Asp.net 在执行异步请求时,如何向waithandle.waitany发送信号?
我使用以下示例代码使用异步请求获取一些HTML页面 我不想等到使用WaitHandle.WaitAll的每个请求都完成,只想等到找到正确的值。我目前正以这种方式进行操作,但将ManualResetEvents发送到线程时感觉不对劲。是否应该这样做?有更好的办法吗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;
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告诉我更多,有链接吗?