下面是這種情況:做一個函數只是一個時間只能有一個線程在TPL
- 我有一個是所有的線程之間共享的代理。
如果這個代理被阻塞,那麼只有一個線程需要從ProxyQueue中取出一個代理,而不是所有的代理。 爲了出隊,我現在使用互鎖,所以一次只能有一個線程可以輸入函數。
private static volatile string httpProxy = "1.1.1.1"; private static int usingResource = 0; string localHttpProxy; try { HttpWebRequest oReqReview = HttpWebRequest)WebRequest.Create(url); if (IsHttpProxyDequeue) { oReqReview.Proxy = new WebProxy(httpProxy, 8998); localHttpProxy = httpProxy; } HttpWebResponse respReview = (HttpWebResponse)oReqReview.GetResponse(); DoSomthing(); } catch (Exception ex) { if (0 == Interlocked.Exchange(ref usingResource, 1)) { if (ex.Message == "The remote server returned an error: (403) Forbidden." && httpProxy == localHttpProxy) { IsHttpProxyDequeue = currentQueueProxy.TryDequeue(out httpProxy); } Interlocked.Exchange(ref usingResource, 0); } }
你的問題是什麼?什麼不適合你? – dthorpe 2013-03-19 15:53:24
這段代碼不像我描述的那樣工作。只是想知道是否有多個線程聯鎖,他們是否等到聯鎖可用?如果是的話,那麼getproxy函數會重複多次 – MT467 2013-03-19 16:04:55
「如果這個代理被阻塞」是什麼意思? – theMayer 2013-03-21 00:10:42