Принудительный пересчет скрипта
Метод для принудительный пересчет скрипта:
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);
}
}
}
Was this helpful?