2016-09-20 20 views
1

私は以下のメソッドを持っていますが、このメソッドを複数同時に呼び出したいと思います。結果文字列のいずれかに「開始」テキストが含まれているかどうかをチェックし、次にコントロールを転送します。そうでなければ、結果文字列で「開始」を待ちます。ウィンドウフォームアプリケーションで非同期メソッドを複数回呼び出す

public async Task<string> ProcessURLAsync(string url, ExtendedWebClient oExtendedWebClient, string sParam) 
{ 
    ExtendedWebClient oClient = new ExtendedWebClient(false); 
    oClient.CookieContainer = oExtendedWebClient.CookieContainer; 
    oClient.LastPage = "https://www.example.co.in/test/getajax.jsf"; 
    byte[] PostData = System.Text.Encoding.ASCII.GetBytes(sParam); 
    Headers.Add("User-Agent", "Mozilla/5.0 (Windows T 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36"); 
    Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); 
    Headers.Add("Content-Type", "application/x-www-form-urlencoded"); 
    oClient.Headers.Remove("X-Requested-With"); 
    oClient.Headers.Add("X-Requested-With", "XMLHttpRequest"); 
    var byteArray = await oClient.UploadDataTaskAsync(url, PostData); 
    string result = System.Text.Encoding.UTF8.GetString(byteArray); 
    return result; 
} 

これを実現する方法をご提案ください。

+0

私はTask.WaitAllを使用。できます。すべてのタスクが終了するのを待ちます。いずれかが終了して文字列「開始」が含まれている場合は、それから前方に移動します。それ以外の場合は、完了するまで待ってください。 – Karan

答えて

2

できることは、whileループで実行されるようにタスクを編集し、値が見つかったときに終了することです。

次に、ループを使用してタスクのリストを作成し、同時に実行するタスクを繰り返し実行します。

次にあなたがTask.WhenAny

public async Task<string> ProcessURLAsync(string url, ExtendedWebClient oExtendedWebClient, string sParam) 
{ 
    string result = ""; 
    while (!result.Contains("Start")) 
    { 
     ExtendedWebClient oClient = new ExtendedWebClient(false); 
     oClient.CookieContainer = oExtendedWebClient.CookieContainer; 
     oClient.LastPage = "https://www.example.co.in/test/getajax.jsf"; 
     byte[] PostData = System.Text.Encoding.ASCII.GetBytes(sParam); 
     Headers.Add("User-Agent", "Mozilla/5.0 (Windows T 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36"); 
     Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); 
     Headers.Add("Content-Type", "application/x-www-form-urlencoded"); 
     oClient.Headers.Remove("X-Requested-With"); 
     oClient.Headers.Add("X-Requested-With", "XMLHttpRequest"); 
     var byteArray = await oClient.UploadDataTaskAsync(url, PostData); 
     result = System.Text.Encoding.UTF8.GetString(byteArray); 
    } 
    return result; 
} 

を使用し、このようにそれを使用することができます:

 List<Task> taskList = new List<Task>(); 
     for(int i = 0; i < 20; i++) //Run 20 at a time. 
      taskList.Add(ProcessURLAsync(url, webClient, "whatever")); 
     await Task.WhenAny(taskList); 
     //Value found! Continue... 
+0

私はタスクに新しいです、可能であれば、サンプルコードを投稿してください。 – Karan

+0

上記のループはメソッドを呼び出し、完了するのを待ちます。私は別のパラメータでこのメソッドを同時にヒットしたい。 – Karan

+0

どのようなパラメータが異なりますか? – ThePerplexedOne

関連する問題