Принудительный пересчет скрипта
Метод для принудительный пересчет скрипта
IContext.Runtime.Recalc(string recalcReason, IDataSourceSecurity dataSourceSecurity, bool inAnyCase = fals)
recalcReason - причина пересчета, любая строка.
&#xNAN;dataSourceSecurity - источник из-за которого запускается пересчет. Можно передать null.
&#xNAN;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); } } }