gpt4 book ai didi

c# - 异步操作不会在 await 命令处停止

转载 作者:太空狗 更新时间:2023-10-29 16:27:10 24 4
gpt4 key购买 nike

我想在 Xamarin CrossPlatform 应用程序上获取我的 gps 坐标,但我遇到了问题。

我有这个代码:

public MapPage()
{
SearchPosition();
map = new Map
{
IsShowingUser = true,
HeightRequest = 100,
WidthRequest = 960,
VerticalOptions = LayoutOptions.FillAndExpand
};

map.MoveToRegion(MapSpan.FromCenterAndRadius(new Position(position.Latitude, position.Longitude), Distance.FromMiles(0.3)));
...
...
}

private async void SearchPosition()
{
position = await getPosition();
}

async Task<Plugin.Geolocator.Abstractions.Position> getPosition()
{
var locator = CrossGeolocator.Current;
locator.DesiredAccuracy = 50;

Plugin.Geolocator.Abstractions.Position position = await locator.GetPositionAsync(TimeSpan.FromSeconds(5));

return position;
}

我只想等待 gps 坐标,但在我获得 gps 坐标之前它会继续并转到“MoveToRegien”。我不明白为什么,有人可以帮助我吗?谢谢!

最佳答案

在您的 SearchPosition 方法中返回 void 而不是 Task 是否有任何特殊原因?

这可能是你的问题,所以把它改成:

async Task SearchPosition()

我实际上会改变它以返回一个位置:

async Task<Plugin.Geolocator.Abstractions.Position> SearchPosition() => await GetPosition();

另一个问题是,你真的需要用 SearchPosition() 方法包装 GetPosition() 方法,除了调用第一个方法什么都不做吗?看起来一团糟。

您的代码很难看,您没有遵循命名约定,一半代码看起来像 Java,另一半像 C#。请大家在写代码的时候,尊重语言,尊重自己,熟悉naming conventions并关注他们。

编辑:
我想我现在看到你真正的问题了。您正试图在构造函数中获得一个位置,因此您没有等待异步 SearchPosition() 方法。

例如,如果您的 MainPage 实际上源自 ContentPage,我建议将您的 GPS 相关逻辑移至 OnAppearing 方法。这是一个例子:

public class MainPage : ContentPage
{
...
public MainPage()
{
map = new Map
{
IsShowingUser = true,
HeightRequest = 100,
WidthRequest = 960,
VerticalOptions = LayoutOptions.FillAndExpand
};
}

protected async override void OnAppearing()
{
position = await GetPosition();

map.MoveToRegion(MapSpan.FromCenterAndRadius(new Position(position.Latitude, position.Longitude), Distance.FromMiles(0.3)));
}

async Task<Plugin.Geolocator.Abstractions.Position> GetPosition()
{
var locator = CrossGeolocator.Current;
locator.DesiredAccuracy = 50;

Plugin.Geolocator.Abstractions.Position position = await locator.GetPositionAsync(TimeSpan.FromSeconds(5));

return position;
}
}

关于c# - 异步操作不会在 await 命令处停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48111472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com