Нужна помощь!
Есть код:
//Событие изменения PnL
strategy.PnLChanged += () =>
{
x = x + 1;
};
Когда запускаешь несколько стратегий второе приходящее событие обрывает выполнение действия в скобках и начинает свое, в итоге получается белиберда.
Подскажите как сделать очередь выполнения событий или еще лучше сделать их параллельное вычисление.
Вот нашел пример в интернете: http://usings.ru/2009/06/22/eventpool/
Заранее спасибо.
コメント (8)
ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください
//Событие изменения PnL strategy.PnLChanged += () => { x = x + 1; };
это, грубо говоря, через многопоточность.
Либо попробовать через блокировку:
http://msdn.microsoft.com/ru-ru/library/c5kehkcz.aspx
Lock не работает. Перебрал все возможные варианты. Может потому что метод только один и он статичный? В общем не пошло, а первый вариант пока запустить не получается.
Можно на код взглянуть, где этот кусок используется?
В циклах перебираются параметры при тестировании. Это еще черновая версия, но рабочая. Когда запускаю по одному трейдеру все нормально. Когда больше, то в стратегиях начинают мешаться значения и не получается их вывести. В общем нет синхронизации.
П.С. Использую циклы по условию для ожилания завершения стратегии и потом только запускаю новую партию стратегий. Есть ли другие более производительные варианты реализации кроме как While? Или и так нормально?
И далее его используем так:
Могу всю программу на почту сбросить.
Попробовал. Не помогло. Тот же фарш из потоков. Прям генератор случайных чисел получился))) Поменял код. Решил оставить только одну подписку на события. И забираю коллекцию trader.MyTrades. Потом буду ее потрошить.
Попробовал с этой подпиской. Вообще вылетает.
С событиями заметил, что может только дойти до фигурной скобки и даже не зайти в блок операторов и сразу смениться на новое пришедшее событие. Даже не знаю, как подойти. Может реализовать очередь событий из того примера в интернете, который я указал в первом сообщении ветки?
П.С. Вылетает ошибка, что IEnumerable<MyTrade> нельзя сериализовать. "Тип "Ecng.ComponentModel.NotifiableObject" в сборке "Ecng.ComponentModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" не помечен как сериализуемый." Конвертировать в другую коллекцию? Или можно проще решить?