1111111111111111

一、异步编程时ASP.NET Core和EF Core的默认模式
Web服务器的可用线程是有限的,而在高负载情况下的可能所有线程都被占用。当发生这种情况的时候 ,服务器就无法处理新请求,直到线程被释放。使用同步代码时,可能会出现多个线程被占用但不能执行任何操作的情况。因为它们正在等待I/O完成。使用异步代码时,当进程正在等待I/O完成。服务器可能将其线程释放用于处理其他请求。因此,使用异步代码可以更有效的利用服务器资源,并且服务器可以无延迟地处理更多流量。

异步代码会在运行时引入少量开销。流量较低时,对性能的影响可以忽略不急,但流量较高时,潜在的性能改善非常显著。

async关键字和Task返回值,await关键字和ToListAsync方法让代码异步执行

  • aysnc关键字让编译器执行以下操作
    1.为方法主体的各个部分生成回调
    2.创建返回的Task对象
  • 返回类型Task表示正在进行的工作
  • await关键字让编译器将该方法拆分为两个部分。第一部分是以异步方式结束已经启动的操作,第二部分是当操作完成时注入调用回调方法的地方。
  • ToListAsync是ToList扩展方法的异步版本。

注意事项

  • 只有导致查询或发送数据库命令的语句才能以异步方式执行,这包括ToListAsync、SingleOrDefaultAsync、FirstOrDefaultAsync和SaveChangesAsync.不包括只会更改IQueryable的语句,例如 var students = context.Students.Where(s = >s.LastName ==“D”)
  • EF Core上下文非线程安全;请勿尝试并执行多个操作
  • 若要利用异步代码的性能优势,请验证在嗲用数据库发送查询的EF Core方法时,库程序包(如分页)是否使用异步。

你可能感兴趣的:(.NET)