如何管理多线程c#应用程序

时间:2014-03-26 15:09:30

标签: c# multithreading

我有以下情况:

C#应用程序(.net 4.0 / 4.5),有5-6个不同的线程。每个线程都有一个不同的任务,每x秒启动一次(范围从5到300)。

每项任务都有以下步骤:

  1. 从Sql Server中获取项目
  2. 转换Json中的项目
  3. 将数据发送到网络服务器
  4. 等待服务器的回复。
  5. 由于此任务可能在某些时候失败(互联网问题,超时等),.NET世界中最好的解决方案是什么?

    我考虑过以下解决方案:

    • 每x秒生成一个新线程(如果执行中没有此类型的另一个线程)
    • 为每种类型的任务生成一个线程,并每隔x秒循环一次步骤(以了解管理异常的方法)

    哪个会更安全,更健壮?应用程序将在无人值守系统上运行,因此无论出现任何可能的异常,它都应该能够继续执行。

2 个答案:

答案 0 :(得分:0)

创建线程非常昂贵。第一个选择并不是一个好选择。如果"做东西的循环"非常简短(在暂停之间),您可以考虑使用ThreadPool或TPL。如果线程主要忙,或者工作需要花费很多时间,那么专职工作者就更合适了。

至于例外:不要让例外逃避工人。你必须抓住他们。如果所有这些意味着你放弃并在几秒钟内重试,那可能就好了。

答案 1 :(得分:0)

您可以使用生产者消费者模式方法对整个事物进行建模。您有一个生产者将新任务描述放入队列中,您可以拥有多个从队列处理的消费者(4或5个线程)。消费者或处理线程的数量可以根据负载,队列的长度而变化。

每项任务都涉及从数据库读取,转换格式,发送到Web服务器,然后处理来自Web服务器的响应。我假设每项任务都会执行所有这些步骤。

如果队列中的项目出现异常,您可能会将队列项目标记为失败,并将其安排在以后重试。

相关问题