【发布时间】:2023-04-04 02:11:01
【问题描述】:
我有以下场景:
C# 应用程序 (.net 4.0/4.5),具有 5-6 个不同的线程。每个线程都有不同的任务,每 x 秒启动一次(范围从 5 到 300)。
每个任务都有以下步骤:
- 从 Sql Server 获取项目
- 在 Json 中转换项目
- 向网络服务器发送数据
- 等待服务器回复。
由于此任务在某些时候可能会失败(互联网问题、超时等),.NET 世界中的最佳解决方案是什么?
我想过以下解决方案:
- 每 x 秒产生一次新线程(如果没有其他此类线程正在执行)
- 为每种类型的任务生成一个线程并每 x 秒循环一次步骤(以了解管理异常的方式)
哪个更安全、更健壮?应用程序将在无人值守的系统上运行,因此无论任何可能的异常情况,它都应该能够继续执行。
【问题讨论】:
-
我的第一个问题是要真正确定是否真的需要多线程,因为它确实增加了进入的重大障碍和可维护性问题。感知到的性能提升几乎从未存在。如果您使用多线程来提供响应式 UI,则应首先考虑 async/await,这会降低复杂性。
-
我认为TPL Dataflow 是解决此问题的正确工具。在 SO 上有一些很好的使用示例。
标签: c# multithreading