使用Tasks运行多个进程的Windows服务

时间:2014-05-14 15:54:43

标签: c# multithreading windows-services task-parallel-library async-await

我有一个 C#Windows服务,它有一个定时器,每隔10秒检查一次"标记"在我的SQL Table中,任何正在执行的流程。

所以现在我的Windows服务内部了:

private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {

    // flag so the process is only executed one at a time.
    if (!_isProcessBusy) {

        RunProcess();

    }
}

private void RunProcessSync() {

    _isProcessBusy = true;

    // ... here all the code for doing the internal process ...


    // when process is Done then change the flag so a new process can be executed
    _isProcessBusy = false;

}

现在我需要让Windows服务运行相同进程的多个线程,所以如果在我的SQL Table我有3个处理执行,那么我将让服务同时运行3。

我正在考虑使用System.Threading.Tasks库,但不知道这是否是正确的方法,或者可能更容易。

2 个答案:

答案 0 :(得分:3)

这里确实没有问题,但是:

是。您可以使用Tasks,async-await和Parallel。这里最简单的选择可能是使用Parallel.Invoke

Parallel.Invoke(new Action[] 
{
    () => RunProcess(1), 
    () => RunProcess(2), 
    () => RunProcess(3)
});

这将在内部使用TaskParallelLibrary,但它更简单。更多信息:Parallel.Invoke() vs. Explicit Task Management

答案 1 :(得分:-3)

您可以创建backgroundWorker来进行后台处理。 (BackgroundWorker只是一个" warpper"用于线程clases)。

祝你好运