2013-04-17 126 views
0

我有一個問題,一個線程或BeginInvoke來的擋住了我的數據操作的整個過程中,我開始線程或調用這樣線程阻塞問題

private void StartRetweetMarch(string twStatusId) 
{ 
    foreach (var line in _emailBox.Lines) 
    { 

     //new Action<object>(Hashtags).BeginInvoke(new Email { twStatus = twStatusId, login = line.Split(':')[0], password = line.Split(':')[1] }, null, null); 
     new Thread(new ParameterizedThreadStart(Hashtags)).Start(new Email { twStatus = twStatusId, login = line.Split(':')[0], password = line.Split(':')[1] }); 
     //_threads.Add(new Action<object>(Hashtags).BeginInvoke(new Email { login = line.Split(':')[0], password = line.Split(':')[1] }, null, null)); 
     //Thread.Sleep(40000);w 
     // new Thread(new ParameterizedThreadStart(Hashtags)).Start(new Email { login = line.Split(':')[0], password = line.Split(':')[1] }); 
    } 
} 

但僅此的foreach調用的第一個電話,其他的人正在等待或類似的事情,我不知道該怎麼做。

+0

'Hashtags'方法是怎樣的?你有沒有試過調試你的代碼,並確認該方法實際上只被調用一次?什麼是阻塞的堆棧跟蹤? (你可以通過手動打破調試器然後查看調用堆棧來發現問題。)你是不是在某處遇到異常? – svick

+0

@svick這是在PasteBin http://pastebin.com/XuZSpvuW – fibertech

+0

我的其他問題呢? – svick

回答

0

在Hashtags方法中,它看起來像不是線程安全的。例如,_proxies變量,我不確定這種類型,但如果您只是使用List < string> type,那麼您必須使用排它鎖寫入。

//Outside of Method... 
//Create lock Object 
private static object _lock = new Object(); 

//Inside of Hashtags Method... 
//exclusive lock. Inside of code block is thread safe. 
lock (_lock) { 
    prox = _proxies[new Random().Next(0, _proxies.Count)]; 
    _proxies.Remove(prox); 
}