在for循环中运行RunAsync()

时间:2012-11-14 15:58:28

标签: c# windows-runtime winrt-async

https://github.com/Sangeepan/stackoverflow_github(生成此错误的测试项目)

以下代码生成错误:

mscorlib.dll中出现未处理的“System.StackOverflowException”类型异常

    private async void updateUserlist(String userlist)
    {
        var jsonArray = JArray.Parse(userlist);

        foreach (var jsonobjects in jsonArray)
        {
            var item = jsonobjects["Id"];
            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => main_userlist.Items.Add(item));
        }
    }

当我用Debug.Writeline(item)替换await行时,它工作正常。

2 个答案:

答案 0 :(得分:1)

如果您正在等待的任务过快完成并且您有很多要处理的项目,则会发生这种情况。

让您的async来电更“粗”(因此更慢):

private async Task updateUserlistAsync(String userlist)
{
  var jsonArray = JArray.Parse(userlist);
  var jsonobjects = jsonArray.Select(jsonobjects => jsonobjects["Id"]).ToArray();
  await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
  {
    foreach (var item in jsonobjects)
    {
      main_userlist.Items.Add(item);
    }
  });
}

答案 1 :(得分:0)

问题解决了。我需要将toString()添加到json对象。有时,VS12中的错误消息可能会误导您。当我搜索stackoverflow错误消息时,它就是无限循环和线程。

main_userlist.Items.Add(item.toString());