0

2つのSmtpClientオブジェクトがあり、両方で同時にSendAsync()メソッドを呼び出す場合、これら2つの送信要求は1つのスレッドで順番に処理されますか、それとも複数のスレッドで同時に処理されますか?SendAsync()メソッドの実装は何ですか?

すべてのSendAsync()メソッド呼び出しがWebサーバースレッドプールからの新しいスレッドで処理される場合、これによりWebサーバースレッドプールの空きスレッドが減少し、全体的なパフォーマンスが低下する可能性があります(スレッドプールの最大制限に達した場合)。

MSDNのドキュメントを検索しましたが、非同期メソッドがどのように処理されるかについての説明が見つかりませんでした。

4

2 に答える 2

0

裏で呼び出しは非同期のままであり、継続的な処理を駆動するために下位層(つまり、Winsock、非同期モードで使用される)からのコールバックに依存している可能性が高いです。スレッドは、以前の呼び出しが完了するのを待たずに、複数の非同期送信呼び出しを処理できると期待しています。スループットとリソース使用量の理由から、クライアントから発行された非同期呼び出しを同期方式で処理したり、通信スタックのさらに下の呼び出しごとにスレッドを処理したりすることは意味がありません。

たった2回の呼び出しで、単一のスレッドによって「疑似並行して」(WinSockからの非同期通知を処理するために順番にハンドラーが使用される)処理される可能性が非常に高くなります。

于 2010-10-05T11:22:33.687 に答える
0

1つのSmtpClientオブジェクトに対して、一度に送信できるメッセージは1つだけです... MSDNドキュメントによると:

「SendAsyncを呼び出した後、SendまたはSendAsyncを使用して別の電子メールメッセージを送信する前に、電子メールの送信が完了するのを待つ必要があります。」

于 2012-04-17T15:43:14.973 に答える