使用C# HttpWebRequest進行多線程網頁提交。Async httpclient/HttpWebRequest實現批量任務的發布及異步提交和超時取消


使用線程池並發處理request請求及錯誤重試,使用委托處理UI界面輸出。

 http://www.cnblogs.com/Charltsing/p/httpwebrequest.html

                 for (int j = 0; j < _userlist.Count; j++)
                    {
                        user = _userlist[j];
                        if (user.Length == 0) continue;

                        for (int k = 0; k < _passwordlist.Count; k++)
                        {
                            password = _passwordlist[k];
                            if (password.Length == 0) continue;

                            if (threadscount < _MaxThreadsCount)
                            {                                
                                if (_isStop) 
                                {
                                    WriteMessage("\r\n停止創建新線程,正在結束已運行的線程,請等待...\r\n");
                                    goto StopHttp;
                                }
                                HttpWebRequestParameters param = new HttpWebRequestParameters(url, user, password,0,false);
                                ThreadPool.QueueUserWorkItem(new WaitCallback(MakeWebRequest), param);
                                Interlocked.Increment(ref threadscount);
                                Interlocked.Increment(ref requestcount);
                            }
                            else
                            {
                                k--;
                            }
                            WriteStatus("已使用線程數:" + threadscount.ToString() +
                                        " 已發送請求數:" + requestcount.ToString() +
                                        " 已完成請求數:" + responsecount.ToString());
                        }
                        System.GC.Collect();
                    }

  

***************************************

更新說明:

上面的方法使用線程池,這種方法沒有task方便。

我在2016年11月用async/await+httpclient 重新寫了一個版本,實現了完整的任務發布、異步提交http請求、超時或者手工取消的操作

 

此外,還寫了一個使用async+HttpWebRequest+task實現的異步提交任務及超時處理的代碼版本,這種方法不需要自己實現多線程,異步操作本身就是通過線程池來實現多線程的。

 

 

 

聯系QQ:564955427

歡迎交流!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM