当for循环应终止于信号时可以完全避免轮询

时间:2019-04-13 17:54:12

标签: c# events signals polling

我有以下代码,该代码在收到输入批处理时创建的线程上执行,该线程处理该批数据行。如果用户按下“暂停”,我希望批处理应该暂停并保存状态(即正在处理的行)。

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循环。

在这种情况下,有没有一种方法可以完全避免轮询?

0 个答案:

没有答案