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

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

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

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

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

textual
Листинг программы
    class Program
    {
        static void Main(string[] args)
        {            
            GeoInfo gi = GetGeoInfoAsync().Result;                       
 
            Console.WriteLine(gi);            
 
            Console.ReadKey();
        }
 
        //async method
        static async Task<GeoInfo> GetGeoInfoAsync()
        {
            return await Task<GeoInfo>.Factory.StartNew(() => GetGeoInfo());
        }
 
        //sync method
        static GeoInfo GetGeoInfo()
        {
            string api_url = "http://freegeoip.net/json/";
            string jsonAns;
 
            using (WebClient wc = new WebClient())
            {
                jsonAns = wc.DownloadString(api_url);
            }
 
            var json = JObject.Parse(jsonAns);
 
            var gi = new GeoInfo
            {
                Ip = (string)json["ip"],
                Country = (string)json["country_name"],
                City = (string)json["city"]
            };
 
            return gi;
        }
 
    }
 
    class GeoInfo
    {
        public string Ip { get; set; }
        public string Country { get; set; }
        public string City { get; set; }
 
        public override string ToString()
        {
            return string.Format(@"IP = ""{0}""; Country = ""{1}""; City = ""{2}""", Ip, Country, City);
        }
    }

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


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

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

10   голосов , оценка 3.6 из 5
Похожие ответы