2016-07-16 16 views
0

私は立ち往生し、あなたの助けが必要な作業を達成しようとしています。ダウンロードした複数の非同期Webリクエストの結果を表示します

私は、ページ上のボタンやWebリクエストからの結果を示しているDIVを持っているのVisual Studio 2015

でWebフォームのウェブサイトを作ってきました。

私は3つのURLでGetAsyncを呼び出し、3つのWebリクエストを作成しています。 Request1、Request2、Request3の名前にします。

ここで、Request1は1秒、Request2は5秒、Request3はデータを取得するのに10秒かかるとします。

ウェブサイトがすべての非同期タスクを完了してから、そのデータを表示することがあります。

データを最初にダウンロードしたものとして最初に表示するようにします。

private async Task PerformSearchAsync() 
    { 

     HttpClient client = new HttpClient(); 
     List<string> urlList = SetUpURLList(); 

     IEnumerable<Task<RootObject>> downloadTasksQuery = 
      from url in urlList select ProcessURL(url, client); 

     List<Task<RootObject>> downloadTasks = downloadTasksQuery.ToList(); 

     while (downloadTasks.Count > 0) 
     { 
      // Identify the first task that completes. 
      Task<RootObject> firstFinishedTask = await Task.WhenAny(downloadTasks); 

      // ***Remove the selected task from the list so that you don't 
      // process it more than once. 
      downloadTasks.Remove(firstFinishedTask); 

      // Await the completed task. 
      RootObject rootObject = await firstFinishedTask; 
      DisplayResult(rootObject); 
     } 


    } 

private void DisplayResult(RootObject rootObject) 
    { 
     string s = "Name: "+rootObject.name+ " <span><img src =\"http://"+rootObject.logo+"\" alt=\"Source Logo\" style=\"width:16px;height:16px;\"></span>"; 
     Source.InnerHtml += s; 
    } 

Request1が完了したのであれば、私がやりたいことはあるが、ウェブページ上でその結果を示し、直ちに、次にRequest2またはRequest3が終了すると、更新Webページ、その要求の結果に

は事前

にありがとう
+1

を次にあなたは、クライアントからの三つの異なる要求を行う必要があります。 – Fabio

+0

@Fabioこれらは3つの異なる呼び出しです –

+0

あなたのコードで、 'PerformSearchAsync'への最初の呼び出しは、downloadTaskがすべて完了した後にのみ応答を返します。 IIは、1つの検索タスクしか「実行」する1つのメソッドを作成することを意味していました。次に、クライアントからそのメソッドを呼び出します(ajax呼び出し)。別の3つのパラメータで別々に呼び出します。 – Fabio

答えて

0

Task.WhenAny(downloadTasks)は、Webフォームとは異なるWindows GUI(WinForm)で実行されます。

WebFormでは - ASP.NETは、その要求に対するすべての非同期操作が完了するまで要求を有効に保つことを知っています。

非同期ではHTTPプロトコルが変更されません。

非同期操作はとても、サーバー上にないクライアント(ブラウザ)にasp.netのコンテキストで動作します。

何が起こることは、ウェブサイトが最初にすべての非同期タスクを完了してからデータを示しているということです:)あなたは、トレースを有効にした場合

(あなたが言ったように)は、何が起こるかを知るために(5つのリンクをダウンロードするために)、以下のような結果を得ることができます。

CategoryMessageFrom First(s)From Last(s) aspx.pageBegin PreInit   aspx.pageEnd PreInit0.0001290.000129 aspx.pageBegin Init0.0001430.000014 aspx.pageEnd Init0.0001680.000024 aspx.pageBegin InitComplete0.0001790.000011 aspx.pageEnd InitComplete0.0001910.000012 aspx.pageBegin LoadState0.0002050.000014 aspx.pageEnd LoadState0.0007550.000550 aspx.pageBegin ProcessPostData0.0007720.000017 aspx.pageEnd ProcessPostData0.0012780.000506 aspx.pageBegin PreLoad0.0012950.000017 aspx.pageEnd PreLoad0.0013110.000016 aspx.pageBegin Load0.0013240.000013 aspx.pageEnd Load0.0013530.000029 aspx.pageBegin ProcessPostData Second Try0.0013650.000012 aspx.pageEnd ProcessPostData Second Try0.0013750.000010 aspx.pageBegin Raise ChangedEvents0.0013860.000011 aspx.pageEnd Raise ChangedEvents0.0014000.000014 aspx.pageBegin Raise PostBackEvent0.0014100.000011 aspx.pageEnd Raise PostBackEvent0.0021300.000720 aspx.pageBegin LoadComplete0.0021500.000019 aspx.pageEnd LoadComplete0.0021620.000012 aspx.pageBegin PreRender0.0021730.000011 aspx.pageEnd PreRender0.0021930.000021  http://msdn.microsoft.com0.0301360.027942  http://msdn.microsoft.com/library/windows/apps/br211380.aspx4.5581914.528055  http://msdn.microsoft.com/en-us/library/hh290136.aspx18.06925713.511066  http://msdn.microsoft.com/en-us/library/dd470362.aspx23.2873405.218083  http://msdn.microsoft.com/en-us/library/aa578028.aspx25.5387092.251369  http://msdn.microsoft.com/en-us/library/ms404677.aspx30.5350954.996386  http://msdn.microsoft.com/en-us/library/ff730837.aspx36.9596576.424562 aspx.pageBegin PreRenderComplete41.3143724.354715 aspx.pageEnd PreRenderComplete41.3148800.000508 aspx.pageBegin SaveState41.3152210.000341 aspx.pageEnd SaveState41.3171340.001914 aspx.pageBegin SaveStateComplete41.3171850.000051 aspx.pageEnd SaveStateComplete41.3172100.000025 aspx.pageBegin Render41.3172340.000025 aspx.pageEnd Render41.3193730.002138

ので、ページが完了した後にレンダリングされます執行上のトレース結果に示されているように、すべてのタスクをオンにします。

私は、Fabioがコメントしたように、Jquery ajaxを別のパラメータで別々に呼び出すことをお勧めします。

あなたは読むことができます: AsyncTask with a Updatepanel?

関連する問題