потокобезопасность


потокобезопасность
Atom
4/5/2010


Collection was modified; enumeration operation may not execute.

беру лимиты по бумагам, каждую строку запихиваю в структуру, и делаю
список структур.
в другом потоке (стратегия) проверяю наличие и позу по эмитенту... и
получаю в лоб :) достаточно высылать раз в секунду ордера по рынку и
проверять состояние портфеля.

весь вопрос в том что я не знаю в какую сторону копать, чтобы оно было
потокобезопасно


Tags:


Thanks:


Mikhail Sukhov

Avatar
Date: 4/5/2010
Reply


А это не потокобезопасность =)

простой пример:

var myList = new List<int> { 1, 2, 3 };

foreach (var item in myList)
myList.Remove(item);

упадет на первой же итерации цикла foreach.

Почему? Потому что нельзя делать перебор значений и при это
модифицировать коллекцию. Как избежать:

foreach (var item in myList.ToArray())
myList.Remove(item);

Когда мы сделали ToArray - мы создали новую коллекцию (массив в данном
случае). По ней уже идет перебор, а изменяем мы myList.

На английском более развернуто, чем у меня

http://blogs.msdn.com/kevin_ransom/archive/2005/03/14/395101.aspx


Thanks:

denis

Avatar
Date: 4/7/2010
Reply


спасибо, помогло так:
var tmp = SampleConsole.Program.chemodan.ToArray();
var _papir = tmp.FirstOrDefault(p =>
p.code.Equals(order_tri["SECCODE"]));
if (_papir.code == null)
continue;

Thanks:


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy