首页 > Web开发 > 详细

.Net异步编程之为什么有的异步方法没有async

时间:2021-06-09 21:38:39      阅读:22      评论:0      收藏:0      [点我收藏+]

有的时候,我们可能会发现有些异步方法没有关键字async,程序同样能够正常运行。
了解这个之前,我们需要知道async函数的缺点;

  • 异步方法是一个类(具体需要通过反编译工具看源代码),运行效率没有普通方法高。因为类的创建包含其他成员属性的声明,会消耗很多额外的资源。
  • 可能会占用非常多的线程。

了解到以后特点后,在某些情况下,我们可以省略掉async关键字。

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

        static Task<string> ReadAsync(int num)
        {
            if (num == 1)
            {
                return File.ReadAllTextAsync(@"D:\Test\1.txt");
            }
            else if (num == 1)
            {
                return File.ReadAllTextAsync(@"D:\Test\1.txt");
            }
            else
            {
               throw new ArgumentException();
            }
        }
    }

在上例中,ReadAsync()函数没有关键字async,同样没有问题。该函数体的File.ReadAllTextAsync()前省略了await关键字,函数同样没有async关键字。
此种情况只能应用于异步函数没有其他额外的业务逻辑时,只是简单的讲异步的返回值返回给调用者。

类似于下面这种:
技术分享图片

通过上图可以看出,如果增加了额外的业务逻辑,程序是会报错的。

.Net异步编程之为什么有的异步方法没有async

原文:https://www.cnblogs.com/myblog2021/p/14868398.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!