试着编了个多线程异步下载的程序,其中在多个任务(10个左右)执行时取消所有任务有时会有较长时间延时(20秒左右),经过跟踪发现在取消所有任务后在各个线程的InternetOpenUrl后面的event.waitfor等待了很长时间才返回(大概就是延时的时间,各个线程不等),这段代码大概如下所示,请高手帮我看看哪边有问题。。异步取消应该立刻返回才对吧
InternetOpenUrl部分的代码:
  记录oldtime;
  hConnect := InternetOpenUrl( hSession, PCHAR(url), nil, 0,INTERNET_FLAG_RELOAD or INTERNET_FLAG_PRAGMA_NOCACHE or INTERNET_FLAG_NO_CACHE_WRITE, DWORD(self) );
  if hconnect = nil then
  begin
    if thrd_event.WaitFor(infinite);
    if Pause then //取消任务
    begin
      //这边跟踪打印的当前时间 - oldtime 大概从10秒-20多秒不等
    end;
  end;
关于状态回调的函数:
    INTERNET_STATUS_HANDLE_CREATED:
    begin
      if my.pause then //用户取消,就设置完成事件
      begin
        my.thrd_event.SetEvent;
      end;
      pRes := PInternetAsyncResult(lpvStatusInformation);
      my.hConnect := PHINTERNET(pRes.dwResult);
    end;
    INTERNET_STATUS_REQUEST_COMPLETE:
    begin
      my.thrd_event.SetEvent;
    end;
   //其他的状态都直接判断是否用户取消,取消则设置完成事件。
对于上述代码运行并没有出现什么问题,但就是取消多个任务时有时延时比较严重,请高手赐教。
难道异步操作取消也要等那么长延时??