我有一个 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
库,但不知道这是否是正确的方法,或者可能更容易。
答案 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)。
祝你好运