2013-08-23 11 views
5
private async void button1_Click(object sender, EventArgs e) 
    { 
     var cookie = webBrowser1.Document.Cookie; 
     await 
      Task.WhenAll(
       listBox1 
       .Items 
       .Cast<string>() 
       .Select(async s => 
       { 
        var data = "action=relationship&user_id=" + s + "&relation=follow"; 
        var req = WebRequest.Create("http://example.com") as HttpWebRequest; 
        req.Method = "POST"; 
        req.ContentType = "application/x-www-form-urlencoded"; 
        req.ContentLength = data.Length; 
        req.Headers["cookie"] = cookie; 
        using (var sw = new StreamWriter(await req.GetRequestStreamAsync(), Encoding.ASCII)) 
        { 
         sw.Write(data); 
         sw.Close(); 
        } 
       })); 
     listBox1.Items.Clear(); 
    } 

मैंने इसे दस लाख बार कोशिश की है, और यह हर बार दो बार चलता है। और जब यह दो बार चलता है, तो यह वही करता है जो इसे माना जाता है।यह क्यों लटक रहा है?

क्या करना है यह एक सूची बॉक्स से आइटम लेना है, और प्रत्येक आइटम को POST अनुरोध के हिस्से के रूप में उपयोग करना है। फिर जब यह हो जाता है, तो यह सूची बॉक्स को साफ़ करता है।

कोई बता सकता है कि क्या गलत है?

+0

आपको URL-encode 's' की आवश्यकता है। – SLaks

+0

एस बस एक संख्या है। तो यूआरएल एन्कोडिंग की कोई ज़रूरत नहीं है, लेकिन धन्यवाद। –

+0

समस्या वास्तव में क्या है? – SLaks

उत्तर

1

आपको वास्तव में अनुरोध भेजने के लिए req.GetResponseAsync() पर कॉल करना चाहिए।

0

@SLaks

को जोड़ने के लिए, हम एक ही समस्या थी और यह पता चला अलग जगह एक से मूल रूप से लगता है कि होगा में एक समस्या होने के लिए।

आप .Dispose करने के लिए() या कम से कम .Close() प्रतिक्रिया कि आप .GetResponseAsync से मिलता है, अन्यथा .GetRequestStreamAsync के बगल में कॉल लटका हुआ है की जरूरत है।

ऐसा लगता है कि इसके पीछे के कोड में कुछ सीमित (बल्कि कम) सॉकेट या ताले हैं, जो पिछले अनुरोध को पूरा होने तक भी शुरू करने के लिए आगे के अनुरोधों को अस्वीकार करते हैं।

संबंधित मुद्दे