我有以下情况:
C#应用程序(.net 4.0 / 4.5),有5-6个不同的线程。每个线程都有一个不同的任务,每x秒启动一次(范围从5到300)。
每项任务都有以下步骤:
由于此任务可能在某些时候失败(互联网问题,超时等),.NET世界中最好的解决方案是什么?
我考虑过以下解决方案:
哪个会更安全,更健壮?应用程序将在无人值守系统上运行,因此无论出现任何可能的异常,它都应该能够继续执行。
答案 0 :(得分:0)
创建线程非常昂贵。第一个选择并不是一个好选择。如果"做东西的循环"非常简短(在暂停之间),您可以考虑使用ThreadPool
或TPL。如果线程主要忙,或者工作需要花费很多时间,那么专职工作者就更合适了。
至于例外:不要让例外逃避工人。你必须抓住他们。如果所有这些意味着你放弃并在几秒钟内重试,那可能就好了。
答案 1 :(得分:0)
您可以使用生产者消费者模式方法对整个事物进行建模。您有一个生产者将新任务描述放入队列中,您可以拥有多个从队列处理的消费者(4或5个线程)。消费者或处理线程的数量可以根据负载,队列的长度而变化。
每项任务都涉及从数据库读取,转换格式,发送到Web服务器,然后处理来自Web服务器的响应。我假设每项任务都会执行所有这些步骤。
如果队列中的项目出现异常,您可能会将队列项目标记为失败,并将其安排在以后重试。