Как изменить порядок элементов после зацикливания HttpRequests - PullRequest
0 голосов
/ 26 апреля 2018

У меня следующая проблема (с использованием C # в приложении Xamarin / Android):

  1. Каждую секунду поток пользовательского интерфейса вызывает функцию DoLongTaskAsync, которая ожидает и возвращает элемент результата.

  2. Продолжительность функции DoLongTaskAsync может отличаться, иногда она длится 2 секунды, иногда всего 0,5 секунды.

  3. Через 30 секунд я хочу разместить элементы результатов в том же порядке, что и звонки, которые были сделаны.

  4. Я не могу передать переменную в DoLongTaskAsync.

Я не могу просто поместить их в список после ожидания DoLongTaskAsync, потому что продолжительность может отличаться, и результат 2 может вернуться до завершения вызова 1.

Я также не могу сохранить некоторые временные метки перед ожиданием DoLongTaskAsync, потому что они будут переопределены для каждого вызова из потока пользовательского интерфейса.

Какой лучший способ решить эту проблему?

1 Ответ

0 голосов
/ 26 апреля 2018

Просто lock ваш List<T> перед добавлением результата в функцию DoLongTaskAsync.

List<object> results = new List<object>();

private void DoLongTaskAsync()
{
   object result = null;
   /*
    Do HttpRequest, etc.
   */

   lock (results)
   {
        results.Add(result);
   }
}
...