Использование MarketRuleHelper.SuspendRules при формировании правил в разных методах


Использование MarketRuleHelper.SuspendRules при формировании правил в разных методах
Atom Ответить
28.08.2012


Подскажите пожалуйста, как-то можно установить одновременно несколько правил, чтобы каждое из них было активно только тогда, когда завершено формирование всех этих правил при условии что формирование правил делается в разных методах кода.
В документации есть пример MarketRuleHelper.SuspendRules(Action), но его использовать можно когда все правила создаются в одном методе.

Теги:


Спасибо:




6 Ответов
ra81

Фотография
Дата: 28.08.2012
Ответить


PavelAd Перейти
Подскажите пожалуйста, как-то можно установить одновременно несколько правил, чтобы каждое из них было активно только тогда, когда завершено формирование всех этих правил при условии что формирование правил делается в разных методах кода.
В документации есть пример MarketRuleHelper.SuspendRules(Action), но его использовать можно когда все правила создаются в одном методе.


SuspendRules();


ResumeRules();

Кажется так.
Спасибо:

PavelAd

Фотография
Дата: 28.08.2012
Ответить


ra81 Перейти

SuspendRules();
ResumeRules();
Кажется так.


для Strategy - да, но если для Order - такого нет.
По разным методам разнесены правила для Order, и запустить одновременно нужно их

Автор топика
Спасибо:

Moadip

Фотография
Автор статей Программист
Дата: 28.08.2012
Ответить


Цитата:
По разным методам разнесены правила для Order, и запустить одновременно нужно их


При создании правила, приостанавливать его. Потом возобновлять работу где надо.

Код

		private Order _order;

		private void Method1()
		{
			_order
				.WhenRegistered()
				.Do(() => { })
				.Suspend(true)
				.Apply();
		}

		private void Method2()
		{
			_order
				.WhenCanceled()
				.Do(() => { })
				.Suspend(true)
				.Apply();
		}

		private void Method3()
		{
			foreach (var rule in Rules.Where(rule => rule.IsSuspended))
			{
				rule.Suspend(false);
			}
		}
Спасибо: PavelAd

ra81

Фотография
Дата: 28.08.2012
Ответить


PavelAd Перейти
ra81 Перейти

SuspendRules();
ResumeRules();
Кажется так.


для Strategy - да, но если для Order - такого нет.
По разным методам разнесены правила для Order, и запустить одновременно нужно их



Ну тогда сразу вопрос надо ставить правильно :).
Спасибо:

PavelAd

Фотография
Дата: 03.09.2012
Ответить


Использую код:
Код
Rules.Where(rule => rule.SyncToken == syncToken && rule.IsSuspended).ToArray().ForEach(rule => rule.Suspend(false));

для возобновления правил - как рекомендовали
Не часто, но при каких-то не совсем понятных условиях вылетает исключение, что коллекция была изменена.
Я думал объект Rules синхронизированный.
Автор топика
Спасибо:

esper

Фотография
Программист
Дата: 03.09.2012
Ответить


PavelAd Перейти
Использую код:
Код
Rules.Where(rule => rule.SyncToken == syncToken && rule.IsSuspended).ToArray().ForEach(rule => rule.Suspend(false));

для возобновления правил - как рекомендовали
Не часто, но при каких-то не совсем понятных условиях вылетает исключение, что коллекция была изменена.
Я думал объект Rules синхронизированный.


Поробуйте использовать
Код
Rules.SyncGet
Спасибо: PavelAd


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy