gpt4 book ai didi

c# - 将线程应用程序转换为服务

转载 作者:行者123 更新时间:2023-11-30 17:08:42 25 4
gpt4 key购买 nike

我目前有一个应用程序,它基本上是 ~10 个“LongRunning”Task 的包装器。每个线程都应该无限期地运行,但有时它们会锁定或崩溃,有时包装应用程序会自发退出(我还没有能够追踪到)。此外,包装器应用程序目前只能为一个用户运行,并且该用户必须是重新启动线程或重新启动整个应用程序的用户。

我目前有一个监视器实用程序让我知道线程何时停止工作,以便可以手动重新启动它们,但我想改为自动重新启动它们。我还希望每个人都可以使用包装器来检查线程的状态,并且即使包装器不可用,线程也能运行。

基于这些目标,我想我想将线程分离到一个 Windows 服务中,并将包装器转换成可以连接到该服务以检查其状态并对其进行操作的东西。

我该怎么做呢?这是一个合理的架构吗?我应该将每个线程变成一个单独的服务,还是应该有一个单一的多线程服务?

编辑:所有任务都记录到同一组输出文件(通过 TextWriter.Synchronized(StreamWriter)),我想保持这种行为。
他们目前还共享同一个数据库连接,这意味着我需要让他们同意在必要时同时关闭连接。然而,如果它们被分开,它们可以各自使用自己的数据库连接,我就不需要担心同步了。我实际上怀疑这一步是当前的失败点之一,因此将其拆分是一件好事。

最佳答案

如果可能,我建议您留在一个多线程服务中。只需确保在触发服务停止时正确处理线程即可。将刹车标志放入需要花费大量时间执行的代码块中。这样您就可以让您的服务响应停止事件。记录任何异常并确保等待所有线程退出,直到服务最终停止。这将阻止您在多个线程中运行相同的“任务”。

最终维护一项服务比维护多项服务更容易。

如果您需要一些独立的功能,这些功能可以同时运行,也可以不同时运行,那么拆分为多个服务是合理的。

关于c# - 将线程应用程序转换为服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13586690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com