в текущей теме ?? Phhhew ...
Проверять после каждого шага в вычислении
Хорошо, если ваши «дорогие вычисления» можно разбить на несколько шагов или использовать итеративную логику, вы можете зафиксировать время, когда вы начинаете, а затем периодически проверять между вашими шагами. Это ни в коем случае не общее решение, но будет работать.
Для более общего решения вы можете использовать аспекты или обработку аннотаций, которые автоматически засоряют ваш код этими проверками. Если «чек» говорит вам, что ваше время истекло, верните None.
Ниже я расскажу о решении в Java, используя аннотации и процессор аннотаций ...
public abstract Answer{}
public class Some extends Answer {public Answer(double answer){answer=answer}Double answer = null;}
public class None extends Answer {}
//This is the method before annotation processing
@TimeLimit(45)
public Answer CalculateQuestionToAnswerOf42() {
double fairydust = Math.Pi * 1.618;
double moonshadowdrops = (222.21) ^5;
double thedevil == 222*3;
return new Answer(fairydust + moonshadowdrops + thedevil);
}
//After annotation processing
public Answer calculateQuestionToAnswerOf42() {
Date start = new Date() // added via annotation processing;
double fairydust = Math.Pi * 1.618;
if(checkTimeout(start, 45)) return None; // added via annotation processing;
double moonshadowdrops = (222.21) ^5;
if(checkTimeout(start, 45)) return None; // added via annotation processing;
double thedevil == 222*3;
if(checkTimeout(start, 45)) return None; // added via annotation processing;
return new Answer(fairydust + moonshadowdrops + thedevil);
}