0

我有一个需要在 Macaulay2 中运行多次的功能。它涉及生成随机对象,并且通常非常快。但是,在极少数情况下,一次运行可能需要很长时间才能完成。

我试图限制每次跑步允许在放弃并继续下一次跑步之前花费的时间。我已经使用 Tasks 大部分成功地做到了这一点,但我遇到了一些奇怪的行为。

我创建了一个最小的示例来说明这一点,使用的函数需要(几乎)0 到 2 秒才能完成,但我想将执行时间限制在 1.5 秒。我每隔 0.5 秒检查一次运行是否完成,并运行该函数 5 次,打印结果(在此示例中是运行是否完成):

slowFunction=()->(
    sleep random(0,2);
    return true;
);

cutoffSlowFunction=()->(
    task := schedule slowFunction;
    for i from 1 to 3 do
    {
        nanosleep 500000000;
        if isReady task then break;
    };
    result := false;
    if isReady task then result = taskResult task else cancelTask task;
    return result;
);

for j from 1 to 5 do
{
    result = cutoffSlowFunction();
    print ""; -- STRANGE BEHAVIOUR HERE
    print result;
};

我遇到的问题是,如果我删除了print "";我用注释标记的行,如果函数返回,则循环停止执行true

似乎只要我在这里打印一些东西,我的函数就会运行所需的次数。然而这并不理想,因为它使打印的行数增加了一倍,我想删除它。

我不确定这是否是一个错误,或者是否有办法解决这种行为。任何帮助将非常感激。

4

0 回答 0