确保一些电子邮件按顺序到达,而其他电子邮件随机到达

时间:2012-05-14 04:23:26

标签: c# multithreading email

我正在尝试使用多线程方法同时发送多封电子邮件。在这里我的描述:

我有5封电子邮件需要随机发送:

Email1
Email2
Email3
Email4
Email5

可能首先发送Email5,然后发送Email1或Email4。

我的客户有新的要求:Email1,2,3可能是随机发送的,但Email4必须在Email5之前发送(用户在Email5之前收到Email4,我的意思是有些电子邮件需要通过订单发送,有些则是随机发送的)。

我不知道如何使用多线程方法来解决这个问题。

4 个答案:

答案 0 :(得分:2)

如果您使用任务并行库,则可以使用ContinueWith

轻松满足此类要求
  var firstTask = new Task(() => SendEmail(4));
  var secondTask = firstTask.ContinueWith((t) => SendEmail(5));
  firstTask.Start();

不使用TPL的替代方法可以使用LinkedList将必须按顺序发送的电子邮件链接在一起。创建Queue<LinkedList<Email>>。您的工作线程使用Queue个项目,选择LinkedList,然后将每个Email发送给它{。}}。

答案 1 :(得分:0)

分配优先顺序?但除非您实际拥有多个与邮件服务器的连接,否则您的邮件将按顺序发送...

答案 2 :(得分:0)

将信号量与每封电子邮件相关联,并让电子邮件的线程获取并在发送电子邮件之前等待信号量发送电子邮件4。应该使用零许可证初始化每个信号量,并且线程在发送电子邮件时应释放一个许可证。您也可以使用互斥锁执行此操作。

答案 3 :(得分:0)

如果使用工作模式将工作队列拆分为有序和无序(两个工作队列),并且序列队列只能由一个线程提供。