私は現在、MSMQから次のように読んでいます(簡潔にするために簡略化):
public void Start()
{
this.queue.ReceiveCompleted += this.ReceiveCompleted;
this.queue.BeginReceive();
}
void ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
{
this.queue.EndReceive(e.AsyncResult);
try
{
var m = e.Message;
m.Formatter = this.formatter;
this.Handle(m.Body);
}
finally
{
this.queue.BeginReceive();
}
}
ただし、これではメッセージをシリアルに処理することしかできません。並列メッセージ処理を可能にするためにこのコードを変更するにはどうすればよいですか?
から上に移動できることはわかっthis.queue.BeginReceive();
ていますが、メッセージの数だけスレッドが生成されるのを防ぐにはどうすればよいですか?スレッドプールをフラッディングしないように、並列処理のレベルを適切に制御するにはどうすればよいですか?このための組み込みのメカニズムはありますか、それとも自分のマネージャーを作成する必要がありますか?finally
ReceiveCompleted
編集:私の目的は、メッセージをより速く処理することです。メッセージの処理にはサードパーティへの非同期呼び出しが含まれるため、現在、私の実装はキューを通過するのに多くの時間を浪費しています。
ありがとう