← Zurück

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

Collection was modified; enumeration operation may not execute.

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

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

War dieses Thema hilfreich?

Thema teilen

Kommentare (2)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Mikhail Sukhov
Mikhail Sukhov

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

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

var myList = new List { 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

denis
denis Autor

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