Потоки и возвращаемые значения - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, есть функция:
Листинг программы
  1. public void get_geo_information(string ip, string country_name, string city)
  2. {
  3. string api_url = "http://freegeoip.net/json/";
  4. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(api_url);
  5. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  6. Stream response_stream = response.GetResponseStream();
  7. StreamReader reader_stream = new StreamReader(response_stream, System.Text.Encoding.GetEncoding("utf-8"));
  8. string json = reader_stream.ReadToEnd();
  9. reader_stream.Close();
  10. var j = JObject.Parse(json);
  11. ip = (string)j["ip"];
  12. country_name = (string)j["country_name"];
  13. city = (string)j["city"];
  14. }
Я ее вызываю таким образом
Листинг программы
  1. Thread get_geo_information_thread = new Thread(() => get_geo_information(ip, country_name, city));
  2. get_geo_information_thread.Start();
Как вернуть значения ip, country_name, city в основной поток? Как дождаться завершения этого потока? Заранее благодарен.

Решение задачи: «Потоки и возвращаемые значения»

textual
Листинг программы
  1.     class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {            
  5.             GeoInfo gi = GetGeoInfoAsync().Result;                      
  6.  
  7.             Console.WriteLine(gi);            
  8.  
  9.             Console.ReadKey();
  10.         }
  11.  
  12.         //async method
  13.         static async Task<GeoInfo> GetGeoInfoAsync()
  14.         {
  15.             return await Task<GeoInfo>.Factory.StartNew(() => GetGeoInfo());
  16.         }
  17.  
  18.         //sync method
  19.         static GeoInfo GetGeoInfo()
  20.         {
  21.             string api_url = "http://freegeoip.net/json/";
  22.             string jsonAns;
  23.  
  24.             using (WebClient wc = new WebClient())
  25.             {
  26.                 jsonAns = wc.DownloadString(api_url);
  27.             }
  28.  
  29.             var json = JObject.Parse(jsonAns);
  30.  
  31.             var gi = new GeoInfo
  32.             {
  33.                 Ip = (string)json["ip"],
  34.                 Country = (string)json["country_name"],
  35.                 City = (string)json["city"]
  36.             };
  37.  
  38.             return gi;
  39.         }
  40.  
  41.     }
  42.  
  43.     class GeoInfo
  44.     {
  45.         public string Ip { get; set; }
  46.         public string Country { get; set; }
  47.         public string City { get; set; }
  48.  
  49.         public override string ToString()
  50.         {
  51.             return string.Format(@"IP = ""{0}""; Country = ""{1}""; City = ""{2}""", Ip, Country, City);
  52.         }
  53.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы