1

私の理解では、Taskスレッドを抽象化することがポイントであり、新しいスレッドは保証されていませんTask

私はVS2010でデバッグしていますが、これに似たものがあります:

var request = WebRequest.Create(URL);

Task.Factory.FromAsync<WebResponse>(
    request.BeginGetResponse, 
    request.EndGetResponse).ContinueWith( 
    t => {  /* ... Stuff to do with response ... */ });

これをX呼び出す場合、たとえばX非同期 Web 要求を開始する場合、実行中に実際に行われている同時 (同時) 接続の数を計算するにはどうすればよいですか? どういうわけかそれができる最大値のみを開いていると思います(この場合Xは非常に高いです)、そして他のTasksものは待機中にブロックされますか?

これについての洞察、または実行中の特定の時点で存在するアクティブな (開いている) 接続の数をデバッガーで確認する方法は素晴らしいでしょう。

基本的に、私はそれが私のために処理されているのか、それともサーバーを攻撃しているように見えないように特別な配慮が必要なのか疑問に思っています.

4

1 に答える 1

1

これは に固有のものではありませんTask。への呼び出しを行うとすぐに、外部接続が作成されますTask.Factory.FromAsync。が実行している「タスク」は、Task単に応答が返されるのを待っているだけです (最初に応答が送信されるのではありません)。BeginGetResponseしたがって、マシンがそれ以上リクエストを送信できない場合、への呼び出しは失敗し、サーバーがリクエストをフラッディングしていると信じて拒否している場合、レスポンスにはエラー メッセージが含まれます。

ここで関係する唯一の実際の場所Taskは、応答がマシンによって実際に受信されてから継続が実行されるまでの時間です。大量の応答を取得している場合、またはスレッド プールに大量の作業がある場合は、継続に到達するまでに時間がかかる可能性があります。

于 2012-10-17T15:02:26.567 に答える