检查Parallel.foreach中的线程状态,以便在调用Onstop()时退出

时间:2018-04-14 06:43:01

标签: c# .net multithreading windows-services parallel.foreach

我有一个Windows服务,它可以并行执行某些操作。我不希望并行foreach在调用onStop()方法时突然停止,而是等待并行foreach中的所有线程完成其操作,然后服务必须停止。不确定如何做到这一点。请在下面找到我的示例代码:提前致谢..

//Initialize the timer
Timer timer = new Timer();

public ScheduledService()
{
    InitializeComponent();
}

protected override void OnStart(string[] args)
{
    //handle Elapsed event
    timer.Elapsed += new ElapsedEventHandler(OnElapsedTime);
    timer.Interval = 60000;
    timer.Enabled = true;
}

protected override void OnStop()
{
    timer.Enabled = false;    
    // wait till parallel foreach in processItem completes and then the stop

}

private void OnElapsedTime(object source, ElapsedEventArgs e)
{
    ProcessItems();
}

private void ProcessItems()
{
    Parallel.ForEach(dt.AsEnumerable(), drow =>
    {
      //...
      // Do Stuff
      //...
    });
}

1 个答案:

答案 0 :(得分:0)

我要做的是在调用OnStop()时设置一个标志(如果需要),然后编写代码以在并行循环语句之后停止服务。