Принудительный пересчет скрипта

Метод для принудительный пересчет скрипта:

IContext.Runtime.Recalc(string recalcReason, IDataSourceSecurity dataSourceSecurity, bool inAnyCase = fals)

recalcReason - причина пересчета, любая строка. dataSourceSecurity - источник из-за которого запускается пересчет. Можно передать null. inAnyCase - выполнить пересчет в любом случае. Если указано false, то пересчет будет выполнен только если завершился текущий пересчет (используется в кубиках метронома). Если указано true, то пересчет будет выполнен сразу после текущего пересчета.

Пример вызова: ctx.Runtime.Recalc($"MyRecalc", null, true);

Пример, читается текущая причина пересчета скрипта, если скрипт запущен не через метод Recalc, то запускается Recalc, ждет 5 секунд и завершается. После завершения запускается новый пересчет, в нем будет указано что текущая причина пересчета "MyRecalc" и повторно не будет вызываться Recalc.

public void Execute(IContext ctx, ISecurity sec)
{
	var listReasons = ctx.Runtime.LastRecalcReasons.Select(x => x.Name).Distinct().ToList();
	var listReasonsSt = string.Join(", ", listReasons);
	ctx.Log($"RecalcReasons: " + listReasonsSt, MessageType.Info, true);

	if (!listReasonsSt.Contains("MyRecalc"))
	{
		ctx.Log($"Start recalc", MessageType.Info, true);
		ctx.Runtime.Recalc($"MyRecalc {DateTime.Now}", null, true);

		for (int i = 1; i <= 5; i++)
		{
			Thread.Sleep(1000);
			ctx.Log($"Step {i}", MessageType.Info, true);
		}
	}
}