2012-09-02 26 views
18

किसी की मदद कृपया सकते मुझे नीचे कोड को संशोधित:उदाहरण काम करता है

client.ExecuteAsync(request, response => { 
    Console.WriteLine(response.Content); 
}); 

असल में मैं ऊपर ExecuteAsync विधि का उपयोग करना चाहते हैं लेकिन प्रिंट लेकिन लौट जवाबी कार्रवाई के लिए नहीं करना चाहती। कॉलर के लिए सामग्री।

क्या यह हासिल करने का कोई आसान तरीका है? https://github.com/restsharp/RestSharp

उत्तर

36

चीज़ नहीं है से

public T Execute<T>(RestRequest request) where T : new() 
     { 
      var client = new RestClient(); 
      client.BaseUrl = BaseUrl; 
      client.Authenticator = new HttpBasicAuthenticator(_accountSid, _secretKey); 
      request.AddParameter("AccountSid", _accountSid, ParameterType.UrlSegment); // used on every request 
      var response = client.ExecuteAsync(request, response => { 
    return response.data); 
}); 

}

ऊपर कोड है ... आप एक अतुल्यकालिक रूप से वितरित मूल्य वापस नहीं कर सकते हैं:

मैं इस लेकिन does not 'काम करने की कोशिश की , क्योंकि आपकी कॉलिंग विधि पहले से ही वापस आ जाएगी। जब तक आपके पास नतीजा न हो तो कॉलर को अवरुद्ध करना ExecuteAsync का उपयोग करने के बिंदु को हरा देता है। इस मामले में, मैं वापसी चाहते हैं एक Task<string> (यह मानते हुए response.Content एक स्ट्रिंग है):

Task<string> GetResponseContentAsync(...) 
{ 
    var tcs=new TaskCompletionSource<string>(); 
    client.ExecuteAsync(request, response => { 
    tcs.SetResult(response.Content); 
    }); 
    return tcs.Task; 
} 

अब, जब काम पूरा करता है, तो आप एक मूल्य की है। जैसे ही हम सी # 5 एसिंक/प्रतीक्षा करते हैं, आपको Task<T> के संदर्भ में एसिंक्रोनि को बताने के लिए उपयोग करना चाहिए क्योंकि यह सुंदर कोर है।

http://msdn.microsoft.com/en-us/library/dd537609.aspx

http://msdn.microsoft.com/en-us/library/hh191443.aspx

+0

आप कृपया विस्तार से बताएं सकता है "आप एक एक वापस नहीं लौट सकते समकालिक रूप से वितरित मूल्य " –

0

कोड ऐसा लगता है कि आप ExecuteAsGet या ExecuteAsPost बजाय async कार्यान्वयन के उपयोग करना चाहते हैं पढ़ने से।

या शायद निष्पादित करें- सुनिश्चित करें कि क्लाइंट किस प्रकार का है।

+0

यह प्रश्न RESTSharp के लिए विशिष्ट है, ऐसा नहीं लगता कि ExecuteGet उपलब्ध है। –

+0

आपके द्वारा लिंक किए गए कोड के अनुसार, यह यहां परिभाषित किया गया है (ExecuteAsGet, ExecuteAsPost, और केवल सादा पुराना निष्पादन): https://github.com/restsharp/RestSharp/blob/master/RestSharp/RestClient.Sync.cs –

+0

यह मंच पर निर्भर करता है। विंडोज फोन के लिए RestSharp में केवल async विधियां –

5
@spender की मदद से

, इस मैं क्या मिल गया है:

आप RestSharp परियोजना में नई फ़ाइल जोड़ सकते हैं, और इस कोड जोड़ें:

public partial class RestClient 
{ 
    public Task<IRestResponse<T>> ExecuteAsync<T>(IRestRequest request) 
    { 
     var tcs=new TaskCompletionSource<IRestResponse<T>>(); 

     this.ExecuteAsync(request, response => 
      { 
       tcs.SetResult(
        Deserialize<T>(request, response) 
       ); 
      }); 

    return tcs.Task; 
    }  
} 

यह व्यावहारिक रूप से पूर्ण प्रतिक्रिया वापस आ जाएगी, स्थिति कोड और सब कुछ के साथ है, तो आप जाँच कर सकते हैं प्रतिक्रिया की स्थिति सामग्री प्राप्त करने से पहले ठीक है अगर, और आपसे सामग्री प्राप्त कर सकते हैं:

response.Content 
+2

क्या नेमस्पेस 'Deserialize' है? – im1dermike

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