我正在使用带有 ASP MVC 的实体框架,我有以下问题,我应该始终使用异步方法吗?或者我应该根据自己在一个和另一个之间进行选择?
异步
private static async Task AddStudent()
{
Student myStudent = new Student();
using (var context = new SchoolDBEntities())
{
context.Students.Add(myStudent);
await context.SaveChangesAsync();
}
}
同步
private static void AddStudent()
{
Student myStudent = new Student();
using (var context = new SchoolDBEntities())
{
context.Students.Add(myStudent);
context.SaveChanges();
}
}
当您的任务需要花费大量时间并且需要等待它完成时,您应该使用async/await 。它们通常是涉及输入/输出操作的进程,编译器在调用它们时会生成一个有限状态机。如果您的程序不需要等待复杂操作的结果,那么您可以使用传统的同步方法,因为它将独立执行。
在您的示例中,如果在保存学生信息时要立即显示这些更改,则必须使用异步方法,否则您将不知道学生对象是否已保存到磁盘,因为很难知道写入是否操作成功。将立即执行,获取下一次数据加载时未更新的信息。相反,如果您不介意在调用 save 方法后立即显示/使用数据,您绝对可以使用同步方法。这会导致为每个非即时任务启动一个单独的进程,而不会阻塞代码块中的执行。
为了更好地理解,我们编写以下示例:
现在我们解释一下:
任务 longTask = SaveChangesAsync()在单独的线程中独立执行。在此行之后执行的代码继续在主线程上正常执行,并且可以根据需要执行。然后在行 int result = await longTask; 主线程等待使用SaveChangesAsync创建的线程继续正常执行。如果主任务的独立代码耗时超过 1 秒,则SaveChangesAsync方法将直接返回 1,因为代码已在保持状态的独立线程中执行。