C# 如何在循环HttpRequests后重新排序项目

C# 如何在循环HttpRequests后重新排序项目,c#,android,asynchronous,task,C#,Android,Asynchronous,Task,我在Xamarin/Android应用程序中使用C时遇到以下问题: UI线程每秒调用一个等待的DoLongTaskAsync函数,并返回一个结果项 DoLongTaskAsync函数的持续时间可能不同,有时持续2秒,有时仅为0.5秒 30秒后,我想将结果项按与已完成的调用相同的顺序排列 我无法将变量传递给DoLongTaskAsync 我不能在等待DoLongTaskAsync之后将它们放在列表中,因为持续时间可能不同,结果2可能在调用1完成之前返回 我也不能在等待DoLongTaskAsync

我在Xamarin/Android应用程序中使用C时遇到以下问题:

UI线程每秒调用一个等待的DoLongTaskAsync函数,并返回一个结果项

DoLongTaskAsync函数的持续时间可能不同,有时持续2秒,有时仅为0.5秒

30秒后,我想将结果项按与已完成的调用相同的顺序排列

我无法将变量传递给DoLongTaskAsync

我不能在等待DoLongTaskAsync之后将它们放在列表中,因为持续时间可能不同,结果2可能在调用1完成之前返回

我也不能在等待DoLongTaskAsync之前存储一些时间戳,因为它们会被UI线程的每次调用覆盖

解决此问题的最佳方法是什么?

在添加结果之前,只需在DoLongTaskAsync函数中锁定列表即可

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

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

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

谢谢还没有尝试过,但http请求不应该在锁代码中?如果这样做,一次只能运行一个请求。很遗憾,您的代码不起作用,因为我不知道结果首先进入lock语句,我不知道从HttpRequest首先返回的是什么。@TobiasvonFalkenhayn如果您可以更新您的问题,并包含一个最小的代码示例,我或其他人可能会提供更多帮助。@TobiasvonFalkenhayn针对您的评论,每个线程将按照遇到的顺序进入锁块,并且在任何给定时间只有一个线程将执行它。即先进先出。系统调度和计时可能会稍微影响结果的顺序,但鉴于我目前所了解的情况,这些变量无论如何都超出了您的控制范围。