白森 发表于 2015-5-21 10:06:12

win8的async标记的方法

  public class Class1   {
      List data = new List();
           async public Task getlist()
  {
  return await Task.Run(() =>
  {
                  get();
  List l = new List();
                  l.AddRange(data);
  return l;
  });
  }
        async public void get()
  {
  await Task.Run(() =>
  {
  for (int i = 0; i < 1000; i++)
  {
  data.Add(i.ToString() + "!!!!!!!");
  }
  return;
  });
  }

    }

以上类在调用getlist方法之后返回结果的count数量为0,
此种情况是因为 get()方法内部的线程没有被等待结束方法就调用完成导致。
因为get()方法的内部操作还没有完全执行完成,而又马上获取data集合中的数据,所以为空。
要让getlist的返回结果有数据就要等待get() 方法执行完成。
修改get()方法签名为:      async public Task get()
修改getlist方法中的get()调用为:await get();
这样修改之后,getlist方法中对get的调用就会被等待。
getlist的返回就正常了。。。。
更多关于异步的信息
页: [1]
查看完整版本: win8的async标记的方法