win8的async标记的方法

   public class Class1     {

        List<string> data = new List<string>();

        async public Task<List<string>> getlist()

        {

            return await Task.Run(() =>

            {

                get();

                List<string> l = new List<string>();

                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的返回就正常了。。。。
posted @ 2012-07-04 10:50  think_do  阅读(410)  评论(0编辑  收藏  举报