C#使用semaphore来管理异步下载请求的方法
本文实例讲述了C#使用semaphore来管理异步下载请求的方法。分享给大家供大家参考。具体实现方法如下:
varsemaphor=newSemaphore(50,50); //Weallowatmost50threadsforcrawling varresultPins=newList<Pin>(); //Resultsstoredhere foreach(varpininnewHashSet<string>(pinIdList)) { semaphor.WaitOne(); Console.Write(">"); varpinClient=newWebClient(); pinClient.DownloadStringCompleted+=(sender,ex)=> { varhtml=ex.Result.Replace("\n",""); pinClient.Dispose(); lock(pinIdList) { //dosomepost-processingandwritebacktheresults } Console.Write("<"); semaphor.Release(); }; pinClient.DownloadStringAsync(newUri(string.Format("http://pinterest.com/pin/{0}/",pin))); } for(inti=0;i<50;i++)semaphor.WaitOne(); //Waituntilthelastthreadends. semaphor.Dispose(); Console.WriteLine();
希望本文所述对大家的C#程序设计有所帮助。