← Zurück

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

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

War dieses Thema hilfreich?

Thema teilen

Kommentare (6)

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

ra81
ra81

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

SuspendRules();

ResumeRules();

Кажется так.

PavelAd
PavelAd Autor

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

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

ra81
ra81

PavelAd:

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

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

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

Moadip
Moadip

По разным методам разнесены правила для 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
PavelAd
PavelAd Autor

Использую код:

Rules.Where(rule => rule.SyncToken == syncToken && rule.IsSuspended).ToArray().ForEach(rule => rule.Suspend(false));

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

esper
esper

PavelAd: Использую код:

Rules.Where(rule => rule.SyncToken == syncToken && rule.IsSuspended).ToArray().ForEach(rule => rule.Suspend(false));

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

Поробуйте использовать
```csharp
Rules.SyncGet