异步编程学习总结2

异步方法不一定有async,await。

带有async,await的写法,读取文本内容:

        /// <summary>
        /// 读取txt文本内容 async
        /// </summary>
        /// <param name="num"></param>
        /// <returns></returns>
        public static async Task<string> ReadAsync(int num)
        {
            if (num == 1)
            {
                return await File.ReadAllTextAsync(@"C:\TEMP\1.txt");
            }
            else if (num == 2)
            {
                return await File.ReadAllTextAsync(@"C:\TEMP\2.txt");
            }
            else
            {
                throw new ArgumentException();
            }
        }

调用:

 static async Task Main(string[] args)
        {
            string res = await ReadAsync(1);
            Console.WriteLine(res);
        }

执行结果:

上面的代码实例表示,从1.txt中读取内容,并打印。

没有async,await的写法,读取文本内容:

        /// <summary>
        /// 读取txt文本内容 没有async await
        /// </summary>
        /// <param name="num"></param>
        /// <returns></returns>
        public static Task<string> Read1Async(int num)
        {
            if (num == 1)
            {
                return File.ReadAllTextAsync(@"C:\TEMP\1.txt");
            }
            else if (num == 2)
            {
                return File.ReadAllTextAsync(@"C:\TEMP\2.txt");
            }
            else
            {
                throw new ArgumentException();
            }
        }

调用:

 static async Task Main(string[] args)
        {
            string res = await Read1Async(1);
            Console.WriteLine(res);
        }

 执行结果:

第一种带有async,await的方法会将文件读取的结果转为string,然后放到Task中返回。(多此一举)

第二种没有async,await的方法,会直接将文件读取的结果返回。(效率高)

async方法缺点:

1.异步方法会生成一个类,运行效率没有普通方法高。

2.可能会占用非常多的线程。

总结:

返回值为Task的方法不一定都要标注async,标注async只是为了可以更方便的使用await而已。

如果一个异步方法只是对其他的异步方法调用的转发,没有太多复杂的逻辑(比如等待A的结果,再调用B;把A调用的返回值拿到内部做一些处理再返回),就可以去掉async关键字。

猜你喜欢

转载自blog.csdn.net/liangmengbk/article/details/121194183