Die Anwendung "Task.wait ()" hängt und kehrt nie zurück

Ich bin neu in C # und benutzeTask. Ich habe versucht, diese Anwendung auszuführen, aber meine Anwendung hängt sich jedes Mal auf. Wenn ich hinzufügetask.wait(), es wartet und kehrt nie zurück. Jede Hilfe wird sehr geschätzt. BEARBEITEN: Ich möchte DownloadString asynchron aufrufen. Und wenn ich eine Aufgabe erledige. Start () wie von "Austin Salonen" vorgeschlagen. Ich erhalte nicht die Adresse des Ortes, sondern den Standardwert in der Ortszeichenfolge von returnVal. Dies bedeutet, dass dem Standort ein Wert zugewiesen wurde, bevor die Aufgabe abgeschlossen wurde. Wie kann ich sicherstellen, dass nach Abschluss der Aufgabe nur dann der Standort returnVal zugewiesen wird?

public class ReverseGeoCoding
        {
                static string baseUri = "http://maps.googleapis.com/maps/api/geocode/xml?latlng={0},{1}&sensor=false";
                string location = "default";
                static string returnVal = "defaultRet";
                string latitude = "51.962146";
                string longitude = "7.602304";
                public string getLocation()
                {
                    Task task = new Task(() => RetrieveFormatedAddress(latitude, longitude));  
                //var result = Task.Factory.StartNew(RetrieveFormatedAddress("51.962146", "7.602304"));
                    task.Wait();
                    //RetrieveFormatedAddress("51.962146", "7.602304");
                    location = returnVal;
                    return location;
                }
                public static void RetrieveFormatedAddress(string lat, string lng)
                {
                    string requestUri = string.Format(baseUri, lat, lng);

                    using (WebClient wc = new WebClient())
                    {
                        wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
                        wc.DownloadStringAsync(new Uri(requestUri));
                    }
                }

                static void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
                {
                    var xmlElm = XElement.Parse(e.Result);

                    var status = (from elm in xmlElm.Descendants()
                                  where elm.Name == "status"
                                  select elm).FirstOrDefault();
                    if (status.Value.ToLower() == "ok")
                    {
                        var res = (from elm in xmlElm.Descendants()
                                   where elm.Name == "formatted_address"
                                   select elm).FirstOrDefault();
                        //Console.WriteLine(res.Value);
                        returnVal = res.Value;
                    }
                    else
                    {
                        returnVal = "No Address Found";
                        //Console.WriteLine("No Address Found");
                    }
                }
            }

Antworten auf die Frage(2)

Ihre Antwort auf die Frage