1

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

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

Email1
Email2
Email3
Email4
Email5

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

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

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

4

4 回答 4

2

如果您使用任务并行库,使用ContinueWith很容易满足这种要求

  var firstTask = new Task(() => SendEmail(4));
  var secondTask = firstTask.ContinueWith((t) => SendEmail(5));
  firstTask.Start();

另一种不使用 TPL 的方法可以使用 aLinkedList将必须按顺序发送的电子邮件链接在一起。创建一个Queue<LinkedList<Email>>. 您的工作线程消耗这些Queue项目,挑选 a LinkedList,然后将其链接起来发送每个Email.

于 2012-05-14T04:35:23.837 回答
0

如果您使用工作模式,则将工作队列拆分为有序和非有序(两个工作队列),并让序列队列仅由一个线程提供服务。

于 2012-05-14T04:41:29.453 回答
0

分配优先级?但是除非您实际上拥有与邮件服务器的多个连接,否则您的邮件无论如何都会按顺序发送出去......

于 2012-05-14T04:29:12.723 回答
0

将信号量与每封电子邮件相关联,并获取电子邮件 5 的线程,并在电子邮件 4 发送电子邮件之前等待它的信号量。每个信号量都应该使用零许可进行初始化,并且线程在发送电子邮件后应该释放一个许可。您也可以使用互斥锁来做到这一点。

于 2012-05-14T04:30:58.737 回答