Проблема тайм-аута геолокации Xamarin Essentials

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

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? В конце концов, его нужно будет запустить на обоих. Я пробовал установить точность при получении местоположения, но это не помогает. Кажется, что приложение зависает с каждым вызовом расчета расстояния. Любые идеи?


person Stephen Link    schedule 01.06.2019    source источник


Ответы (1)


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

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

Вот та же статья, которую вы можете посмотреть:

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

person Cherry Bu - MSFT    schedule 03.06.2019