我有以下代码,该代码在收到输入批处理时创建的线程上执行,该线程处理该批数据行。如果用户按下“暂停”,我希望批处理应该暂停并保存状态(即正在处理的行)。
bool pause = false;
int rowBeingProcessed = -1;
void Process(List<Row> batch)
{
for(int i=0; i<batch.size(); i++)
{
if(pause)
{
rowBeingProcessed = i; // save state
break; // stop execution
}
}
}
void PauseSignalHandler()
{
pause = true;
}
现在,即使我使用事件/信号方法进行暂停,我仍然可以在for
循环内对暂停变量进行轮询。
我知道我可以将save state
部分移到PauseSignalHandler()
内,但这并不能消除问题,因为我仍然必须将pause
轮询到break
for
循环。
在这种情况下,有没有一种方法可以完全避免轮询?