2012-03-26 16 views
5

नया एएसपी.नेट वेब एपीआई एचटीपी क्लाइंट मुझे कुछ अजीब परिणाम दे रहा है। यहां मेरा कोड है:एचटीपी क्लाइंट GetStringAsync - यह कभी वापस नहीं आता है

class Program { 

    static async void Main(string[] args) { 

     var address = "http://localhost:3895/api/urls"; 

     Console.WriteLine(await getStringAsync(address)); 
     Console.ReadLine(); 

    } 

    public static async Task<string> getStringAsync(string uri) { 

     var httpClient = new HttpClient(); 
     return await httpClient.GetStringAsync(uri); 
    } 
} 

यह कभी वापस नहीं आता है और कंसोल अचानक प्रकट होता है और गायब हो जाता है। जब मैं नीचे कोड को बदलता हूं, तो यह काम करता है:

static void Main(string[] args) { 

    var address = "http://localhost:3895/api/urls"; 

    Console.WriteLine(getString(address)); 
    Console.ReadLine(); 

} 

public static string getString(string uri) { 

    var httpClient = new HttpClient(); 

    return httpClient.GetStringAsync(uri).Result; 
} 

कोई मुद्दा क्या होगा?

+1

यह संकलित भी नहीं करता है। एक प्रविष्टि बिंदु ('मुख्य') async नहीं हो सकता है। यह CS4009 त्रुटि के साथ विफल हो जाएगा। – vcsjones

+0

@vcsjones Async CTP में इसकी अनुमति है (लेकिन एक बुरा विचार) – hvd

+1

@hvd दिलचस्प। सबसे अच्छा है कि वे अब इसे अस्वीकार करते हैं। – vcsjones

उत्तर

9

asyncMain पर वीएस 11/.NET 4.5 कंपाइलर में अस्वीकृत है, इसलिए मुझे लगता है कि आप Async CTP का उपयोग कर रहे हैं। यदि .NET 4.5 का उपयोग करना एक विकल्प है, तो स्विच करें।

उस तरफ, कारण यह काम नहीं करता है क्योंकि async, या अधिक आम तौर पर, कार्य, शेष कोड को निष्पादित करने के लिए कुछ तरीके से सिग्नल करने में सक्षम होने पर भरोसा करते हैं। यह .Result के साथ काम करता है क्योंकि कोड सिंक्रनाइज़ेशन चलाता है, इसलिए समस्या लागू नहीं होती है।

कोई अंतर्निहित है सांत्वना अनुप्रयोगों के लिए समर्थन है, क्योंकि वे आम तौर पर उपयोग नहीं करते संदेश रास्ता उदाहरण WinForms के लिए करता है कि में लूप होता है, लेकिन आप, Microsoft Visual Studio Async CTP\Samples\(C# Testing) Unit Testing\AsyncTestUtilities देख सकते हैं विशेष रूप से GeneralThreadAffineContext.cs एक बुनियादी उदाहरण है कि काम करता है पाने के लिए कंसोल अनुप्रयोगों में भी।

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