1

Webサイトに、複数のWebサーバーをチェックして結果を集約する必要があるアクションがあります。現在、これは各Webサーバーに対して同期的に実行されており、Webサーバーのforeach応答性によっては低速になる可能性があります。

Idが実行したいのは、各リクエストを非同期で実行し、すべての結果が完了したときにすべての結果を集約することです。

私の質問は-ASP.NETWebformsで、これを行うための最良の方法は何ですか?避けるべきことはありますか?

各リクエストには2秒かかる可能性があるため、すべてを同時に開始したいと思います。

4

3 に答える 3

2

これは、「標準」非同期IOまたは「標準」スレッドIOの適切な注意のように聞こえます。

Tを表す場合、これは、シーケンシャルな依存関係やその他のボトルネックがないと仮定すると、代わりに{time1, time2, ..}応答を行います。O(max(T))O(sum(T))

これは、どちらかを使用して行うことができます

非同期IO -IOがスレッドをブロックしない場合

または同期IO、ただしスレッド化-IOが個々のスレッドをブロックする場合

使用される.NETバージョンと外部データを取得するために利用可能なAPIは、アプローチが[より]適切である要因を果たします。

于 2012-10-23T19:36:39.687 に答える
0

jQueryを使用して、サーバーへの非同期AJAX呼び出しを行います。ただし、WebFormの代わりにashxハンドラーを使用して、サーバーでAJAX呼び出しを処理し、データをクライアントに送り返します。ashxハンドラーは、WebFormsよりも軽量です。これがASHXハンドラーの作成に関する簡単なチュートリアルですhttp://www.dotnetperls.com/ashxこれは役に立ちますか?

于 2012-10-23T19:13:28.903 に答える
0

.NET Framework 4を使用している場合は、タスク並列ライブラリを使用してこれを実現できます。さまざまなサーバーを呼び出す必要があるメソッドであると仮定するGetDataFromServerと、次のロジックのようなロジックを実行して、すべてのサーバーからデータを取得できます。

var d1 = Task.Factory.StartNew(() => GetDataFromServer("server1"));
var d2 = Task.Factory.StartNew(() => GetDataFromServer("server2"));
var d3 = Task.Factory.StartNew(() => GetDataFromServer("server3"));
var d4 = Task.Factory.StartNew(() => GetDataFromServer("server4"));

TaskCoordinator.WhenAll(new Task[] {d1, d2, d3, d4});

上記の手順では、4つのメソッドすべてを非同期で呼び出します。それらすべてが完了するのを待ちます。各操作の結果は、対応するオブジェクトResultのプロパティに格納されます。Taskしたがって、d1.Result、d2.Resultなどを使用して結果を取得し、メソッド呼び出しから取得した結果に対してロジックを実行できます。

于 2012-10-23T19:39:33.377 に答える