2017-08-04 51 views
-2

我需要其他代碼行等待getUserLocal完成它的工作並返回它們運行的​​值,主要是InitializeComponent();。 我用等待,但它似乎不工作,當這些部件被初始化,我已經沒有了getUserLocal結果尚未...初始化不等待異步方法(xamarin.forms)

這是我的看法的構造

public ComoChegarView(double lat, double longi) 
    { 
     userLocal = new Localizacao(); 
     getUserLocal(); 
     Localizacao lojaLocal = new Localizacao(); 
     lojaLocal.latitude = lat; 
     lojaLocal.longitude = longi; 

     InitializeComponent(); 
    } 

這是異步任務

async Task getUserLocal() 
    { 
     userLocal = await Geolocator.GetUserLocationAsync(); 
    } 

是否有人知道我該怎麼做呢?

+3

請參閱[異步OOP 2:構造函數](https://blog.stephencleary.com/2013/01/async-oop-2-constructors.html)。 – Romoku

+0

請參閱此處的討論,在csharp中正在積極討論異步構造函數。 github.com/dotnet/csharplang/issues/419。 – Shawn

+1

那麼,如果你想保持這種設計,你可能會嘗試'Task.Run(async()=> await getUserLocal())。等待();'你的構造函數會阻止async'方法在異步等待其中一個來自池中的線程。這不是最好的舉措,但它會工作,如果'GetUserLocationAsync'不需要UI上下文工作。 –

回答

0

不能調用從你的構造async方法,這應該是比較明顯的,當你不能標記你的構造爲async,從而導致你不能夠awaitasync方法的結果。

+0

:/然後,我需要其他策略 –

+0

,因爲我需要這些數據在組件初始化之前 –

+0

是的,您可以考慮查看「OnAppearing」事件。事件可以標記爲'async',你可以''等待'async'方法,如果我沒有錯,在'InitializeComponent()'前加載數據。 – IvanJazz