1

マルチスレッドアプローチを使用して、同時に複数の電子メールを送信しようとしています。ここに私の説明:

ランダムに送信する必要があるメールが 5 つあります。

Email1
Email2
Email3
Email4
Email5

おそらく、Email5 が最初に送信され、次に Email1 または Email4 が送信されます。

私は顧客の新しい要件を得ました.Email1、2、3はランダムに送信される可能性がありますが、Email4はEmail5の前に送信する必要があります(ユーザーはEmail5の前にEmail4を取得します。いくつかのEメールは順序で送信する必要があり、いくつかはランダムに送信する必要があることを意味しました)。

マルチスレッドアプローチを使用してこの問題に対処する方法がわかりません。

4

4 に答える 4

2

Task Parallel Library を使用する場合、この種の要件はContinueWithを使用して簡単に満たすことができます

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

TPL を使用しない別のアプローチでは、 を使用してLinkedList、順番に送信する必要がある電子メールを連鎖させることができます。を作成しますQueue<LinkedList<Email>>。ワーカー スレッドはQueueアイテムを消費し、 を選択してLinkedListから、連鎖させてそれぞれを送信しますEmail

于 2012-05-14T04:35:23.837 に答える
0

優先順位を付ける?ただし、実際にメールサーバーへの複数の接続を保持していない限り、メールはとにかく順番に送信されます...

于 2012-05-14T04:29:12.723 に答える
0

各電子メールにセマフォを関連付け、電子メール 5 のスレッドを取得し、電子メール 4 のセマフォで電子メールを送信する前に待機します。各セマフォは許可なしで初期化する必要があり、スレッドは電子メールを送信したときに許可を 1 つ解放する必要があります。これはミューテックスでも行うことができます。

于 2012-05-14T04:30:58.737 に答える
0

ワーカー パターンを使用する場合は、ワーク キューをシーケンス付きとシーケンスなし (2 つのワーク キュー) に分割し、シーケンス キューを 1 つのスレッドのみで処理します。

于 2012-05-14T04:41:29.453 に答える