मैं C# 5 की async सुविधा के लिए नया हूं। मैं इन दो कार्यान्वयन के बीच अंतर को समझने के लिए कोशिश कर रहा हूँ:Async- प्रतीक्षा करें कार्य। Run बनाम HttpClient.GetAsync
कार्यान्वयन 1:
private void Start()
{
foreach(var url in urls)
{
ParseHtml(url);
}
}
private async void ParseHtml(string url)
{
var query = BuildQuery(url); //BuildQuery is some helper method
var html = await DownloadHtml(query);
//...
MyType parsedItem = ParseHtml(html);
SaveTypeToDB(parsedItem);
}
private async Task<string> DownloadHtml(string query)
{
using (var client = new HttpClient())
try
{
var response = await client.GetAsync(query);
return (await response.Content.ReadAsAsync<string>());
}
catch (Exception ex)
{
Logger.Error(msg, ex);
return null;
}
}
कार्यान्वयन 2:
private void DoLoop()
{
foreach(var url in urls)
{
Start(url);
}
}
private async void Start(url)
{
await Task.Run(() => ParseHtml(url)) ;
}
private void ParseHtml(string url)
{
var query = BuildQuery(url); //BuildQuery is some helper method
var html = DownloadHtml(query);
//...
MyType parsedItem = ParseHtml(html);
SaveTypeToDB(parsedItem);
}
private string DownloadHtml(string query)
{
using (var client = new WebClient())
{
try
{
return client.DownloadString(query);
}
catch (Exception ex)
{
Logger.Error(msg, ex);
return null;
}
}
}
मैं नहीं बल्कि दूसरे कार्यान्वयन का उपयोग करेंगे क्योंकि इसे मेरे कोड में विधियों पर कम 'async' हस्ताक्षर की आवश्यकता होगी। मैं समझने की कोशिश कर रहा हूं कि एचटीपी क्लाइंट क्लास का उपयोग करके एक नया कार्य बनाकर इसका क्या फायदा है?
क्या दो कार्यान्वयन के बीच कोई अंतर है?
'async' हस्ताक्षर '- उनके बारे में परवाह नहीं है। पुराने कोड के साथ संगत रहने के लिए "async" सिर्फ "मार्कर" है। प्री-5.0 में आपके पास "प्रतीक्षा" नाम के साथ चर/फ़ंक्शन हो सकते हैं। लेकिन चूंकि पुरानी विधियों में "async" कीवर्ड नहीं है, इसलिए कोड अभी भी सी # 5.0 के साथ संकलित (w/o परिवर्तन) करेगा। – igrimpe