2016-10-13 5 views
0
public static async Task<Position> GetCurrentLocation() 
    { 
     try 
     { 

      var locator = CrossGeolocator.Current; 
      locator.DesiredAccuracy = 100; 


      if (!locator.IsGeolocationAvailable) 
       throw new NotSupportedException("Geolocation not available"); 
      if (!locator.IsGeolocationEnabled) 
       throw new GeolocationException(GeolocationError.PositionUnavailable); 


      return await locator.GetPositionAsync(timeoutMilliseconds: 100000); 
     } 
     catch (Exception ex) 
     { 
      //TODO: Add error logging 
      return null; 
     } 
    } 

スレッド終了とデバッガ return await locator.GetPositionAsync(timeoutMilliseconds: 100000);には戻らないが、出力ウィンドウには、正しく位置を示していますが、コードには戻りませんでした。この休憩の理由は何でしょうか?Xamarin.iosのiPhoneのデバイスの現在の場所(住所)

+0

を使用しているので、私はこれがあると思う:

だから、どのような場合には、あなたの方法は終了しますあなたが探しているものhttp://stackoverflow.com/questions/34375413/program-exits-upon-calling-await – Webbies

答えて

0

あなたの質問が分かっていれば、非同期コードの動作がどうなるか知りたいですか?

最初に用語を正しく理解しましょう:no threadがあります。 Async/awaitはスレッドに関するものではなく、非同期操作のオーケストレーションに関するものです。

あなたが待っているTaskがまだ完了していない場合、コードはawaitに戻ります。その後、実行はコードawaitedの後に取得されます。あなたのケースでは、タスクの結果(=場所)が返されるということだけが起こります。タスクがまだ

  • を完了されていないため、どちらか

    • するか、それが完了すると、あなたがreturn
  • 関連する問題