C# 使用windows服务进行多任务处理

C# 使用windows服务进行多任务处理,c#,windows,multithreading,service,multitasking,C#,Windows,Multithreading,Service,Multitasking,我需要从一个windows服务并行运行同一控制台应用程序的6到8个实例,任何实例中的异常都不会导致主服务停止。 每个实例将使用具有唯一AD帐户的rest web服务,实例将需要单独的配置信息来初始化自身。Windows服务将为所有用户运行(即使未登录),或者可以使用一个服务帐户运行。 我的问题是在上述场景中需要考虑的因素是什么 我应该使用多线程还是启动多进程 我是否需要使用应用程序域隔离每个进程 在启动每个实例之前是否需要分配GUID 我应该遵循的最佳实践是什么 如何保持对实例的最佳控制(例如,

我需要从一个windows服务并行运行同一控制台应用程序的6到8个实例,任何实例中的异常都不会导致主服务停止。 每个实例将使用具有唯一AD帐户的rest web服务,实例将需要单独的配置信息来初始化自身。Windows服务将为所有用户运行(即使未登录),或者可以使用一个服务帐户运行。 我的问题是在上述场景中需要考虑的因素是什么

  • 我应该使用多线程还是启动多进程
  • 我是否需要使用应用程序域隔离每个进程
  • 在启动每个实例之前是否需要分配GUID
  • 我应该遵循的最佳实践是什么
  • 如何保持对实例的最佳控制(例如,如果一个实例未完成或挂起,而另一个实例应继续提供服务)
  • 我应该使用多线程还是启动多进程
  • 如果您希望同时执行此操作,如果您需要等待每个操作完成,那么这是您唯一的选择,是的,这很好(从一开始)

  • 我是否需要使用应用程序域隔离每个进程
  • 不,它们是一个独立的过程,它们已经被隔离,除非它们选择使用共享资源

  • 在启动每个实例之前是否需要分配GUID
  • 我不知道,你为什么需要GUID?你告诉我们

  • 我应该遵循的最佳实践是什么
  • 最佳做法是不要多次运行控制台应用程序。我的任务是将功能放在代码中,并掌握它的功能和实现方式

  • 如何保持对实例的最佳控制(例如,如果一个实例未完成或挂起,而另一个实例应继续提供服务)
  • 这完全是您的实现细节。如果这些进程挂起,那么您可能需要杀死它们。至于如何控制呢?TPL、任务、线程、取消令牌、计时器,这取决于您

    更新

    你投票赞成多进程而不是多线程吗?我想了解 使用PROC和launching有什么优点或缺点 使用并行线程执行多个exe。哪一个更好。只是 更新实例不会命中任何公共文件系统(文件夹)。和 应用程序域会有什么不同

    它们都有优势

    单独的进程与它们共享的操作系统资源完全分离。与单独的应用程序域类似,它与.net结构一样孤立。若您需要完全隔离,那个么可能需要考虑单独的过程

    单独流程的缺点是,您无法轻松地投入和分配资源


    其中,在一个appDomain和单个进程下,您可以利用TPL和更好地划分线程、CPU和资源。这就是说,您对正在发生的事情有了更精细的控制,不会有线程不足和饱和的风险,更易于调试,更易于管理和维护,更易于记录,更易于启动、停止和取消,并且更具容错性。单个进程还有很多好处,不过我想您已经了解了。

    您是希望根据请求动态启动子控制台并使其能够使用该服务,还是需要Windows服务来启动子控制台?如果前面提到过,我建议使用Windows服务托管WCF服务,然后创建一个WCF客户端控制台应用程序,该应用程序可以动态连接/断开与该服务的连接。WCF为会话提供了体系结构(如果端点使用网络管道/telnet/etc)。否则,请提供有关您/用户打算如何与所述应用程序交互的更多详细信息。是的,我需要动态创建实例。好的,我的建议是研究WCF以及如何在Windows服务中托管WCF服务。在网上浏览一些简单的教程,特别是MSDN上的教程,你会在不知不觉中开始运行。一旦您拥有了该服务,Visual Studio就可以为您自动生成客户端代理的所有细节。感谢您的响应,这很有意义,我可以将应用程序转换为使用DLL库而不是控制台(exe)应用程序。但我有进一步的疑问,你们投票赞成多线程多进程吗?我想了解与使用并行线程相比,使用PROC和启动多个exe的优势和劣势。哪一个更好。仅更新实例不会命中任何公共文件系统(文件夹)。应用程序域将如何发挥作用?