Тайм-аут геолокации Xamarin Essentials - PullRequest
0 голосов
/ 01 июня 2019

У меня есть мультиплатформенное приложение, которое извлекает текущее местоположение и использует его в цикле для вычисления расстояния до каждого элемента.Он использует

wineriesView.ItemsSource = await App.WineryManager.GetWineries(seltyp,selval,selwrs);

для загрузки каждого элемента, который содержит широту и долготу, среди прочего.Он вызывает

public Task<List<WineryItem>> GetWineries(string typ, string val, int wrs) { return restService.ReadWineries(typ,val,wrs); }

, который затем вызывает

    public async Task<List> ReadWineries(string typ, string val, int wrs)
{
        var position = await Geolocation.GetLocationAsync();
        var uri = new Uri(string.Format(Constants.WineriesUrl, "wineries_by_region.php?region=piedmont"));
        var urio = new Uri(string.Format(Constants.OnlinesUrl, "onlines_by_id.php?id=12"));
        Items = new List<WineryItem>();
        OItems = new List<OnlineItem>();
    ...

var content = await response.Content.ReadAsStringAsync();
            Records = JsonConvert.DeserializeObject<WineryRecords>(content);
            Items = new List<WineryItem>();
            foreach (var record in Records.records)
            {
                Location winePosition = new Location(Convert.ToDouble(record.Latitude), Convert.ToDouble(record.Longitude));
                double dblDistance = Location.CalculateDistance(position, winePosition, DistanceUnits.Miles);

...

if (dblDistance > 0 && dblDistance < 1000)
                    {
                        item.intDistance = Convert.ToInt16(dblDistance);
                        item.strDistance = dblDistance.ToString("N0")+"Mi";
                    } else
                    {
                        item.intDistance = 0;
                        item.strDistance = "--";
                    }
                    Items.Add(item);

Когда ReadWineries выполняет весь показанный код, он возвращает только 10 элементовк списку, тогда как он вернет весь список 50+, если я прокомментирую геолокацию, местоположение и вычислю код расстояния.Как продлить время ожидания для этой задачи, чтобы она возвращала все элементы, даже если это занимает больше времени?Я отлаживаю это на устройстве Android.Будет ли иметь значение, если я использую устройство iOS?В конце концов, его нужно будет запустить на обоих.Я попытался установить точность на getlocation, но это не помогает.Кажется, что приложение затягивается с каждым вызовом, чтобы вычислить расстояние.Есть идеи?

1 Ответ

0 голосов
/ 03 июня 2019

Как увеличить время ожидания для этой задачи, чтобы оно возвращало все элементы, даже если на это требуется больше времени?

Если вы хотите получить эту цель, вы можете использовать Task.Delay и Task.WhenAny , чтобы сделать это.

Вот та же статья, на которую вы можете взглянуть:

C # XamarinФормы - Выполнение задачи с таймаутом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...