2014-04-04 40 views
0

我現在仍堅持這一問題解決的返回類型,但此錯誤:無法在異步

  • 問題:我無法弄清楚如何解決我正在錯誤,即使我閱讀谷歌搜索等相關文檔。真的,不要告訴我再次這樣做,我不知道該怎麼做!

  • 錯誤:異步方法的返回類型必須是void,任務或任務

  • 代碼:

private async Geoposition userLocation() 
    { 
    Geolocator geolocator = new Geolocator(); 
    geolocator.DesiredAccuracyInMeters = 50; 
    try 
    { 
     Geoposition geoposition = await geolocator.GetGeopositionAsync(maximumAge:TimeSpan.FromMinutes(5),timeout:TimeSpan.FromSeconds(10)); 
     return geoposition; 
    } 
    catch (UnauthorizedAccessException) 
    { 
     return null; 
    } 
    return null; 
} 

回答

4

錯誤是告訴你的問題是什麼。您的方法必須是void,TaskTask<T>

你的方法的簽名更改爲:

private async Task<Geoposition> userLocation() { ... } 
+0

謝謝,其實我不知道我能回到這樣的一個值。那個任務符號不知道:) –

+0

我現在無法理解的是如何從調用它的函數中讀取返回的值。我不能只做一個Geoposition位置變量,它說我不能從任務轉換。你會怎麼做? –

+2

這很好,我通過以下方法修復它:Geoposition currentPosition = await userLocation();我添加了await,它的工作:) –

-1

錯誤:一個異步方法的返回類型必須是void,任務或任務,

兩個全局變量,

string Longitude = null; 
    string Latitude = null; 

錯誤清楚地描述了,你不能返回Geoposition,

private async void GetLocation() 
{ 

    Geolocator geolocator = new Geolocator(); 
    geolocator.DesiredAccuracyInMeters = 50; 

    try 
    { 
     Geoposition geoposition = await geolocator.GetGeopositionAsync(
      maximumAge: TimeSpan.FromMinutes(5), 
      timeout: TimeSpan.FromSeconds(10) 
      ); 

     Longitude = geoposition.Coordinate.Latitude.ToString("0.00"); 
     Latitude = geoposition.Coordinate.Longitude.ToString("0.00"); 
    } 
    catch (Exception ex) 
    { 
     if ((uint)ex.HResult == 0x80004004) 
     { 

     } 
     //else 
     { 
      // something else happened acquring the location 
     } 
    } 

} 
+0

感謝您的解決方案,但我實際上閱讀MSDN,最好總是返回異步方法,以避免錯誤:) –

2

由於錯誤是試圖對你說:你需要你的函數的返回類型更改爲任務,所以它看起來就像這樣:

private async Task<Geoposition> userLocation 
2

當你使用async,你應該返回TaskTask<T>void

private async Task<Geoposition> userLocation() 
{ 
    //Do something here 
} 

您可以檢查this documentation約異步返回類型爲