c# - 多线程应用程序冗余

标签 c# multithreading service redundancy

我们正在尝试为 Windows 编写一个服务,并且需要提出一个冗余计划,以便在应用程序中的某个部分出现故障时,它可以重新启动。我想知道我是否可以使用多线程来完成此任务。

我的想法是创建两个线程,每个线程处理不同的任务。我还想让每个线程监视另一个线程以确保它仍在运行,如果不是,那么它应该启动该线程的一个新实例。 这听起来可行吗?我会使用什么线程技术:互斥体、共享内存、信号量等...? 如果这不是正确的方法,那么可能是什么,只需编写两个单独的服务并使用 IPC?

最佳答案

让您的服务在失败时重新启动的最简单方法是让 Windows 执行此操作。您只需将服务配置为自动重启,这非常简单。您也可以在服务安装程序期间以编程方式执行此操作。有关如何执行此操作的指南,请参阅此帖子:Building a Windows Service – Part 4: Extending the Service Installer .

至于提供“冗余”,则没有。冗余的正确定义意味着您拥有不止一个。这可能是使用多个服务,或者更可能是在多个主机上使用多个服务。在单个主机上拥有多个服务更容易,因为如果需要,您可以使用互斥体进行同步。

The real question is what is this service doing?

如果您的服务正在轮询任务,比如来自数据库或消息队列,那么同步会为您处理。只需为您的数据库建模,以便多个服务都可以独立运行和处理工作,而无需重复工作。现在你有了冗余。

关于c# - 多线程应用程序冗余,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10624024/

相关文章:

c# - SendGrid 不是属性类

java - JProgressbar 未出现在框架中

java - 让应用程序在 Android 上始终在后台运行

c# - 从 C# 使用 native DLL 的输出参数

c# - Winforms Combobox - 不允许用户编辑项目

java - 如何提高Java多线程性能?从 NoSQL 数据库(如 Redis)与 ArrayList 保存/加载数据的时间效率?

.net - 多线程设计最佳实践

linux - Wildfly 服务无法启动

java - 如何使用 java 设置 keystore 的加密服务提供程序

c# 重载方法的泛型函数