一条阻塞线中的异步和同步函数行为

Asynchronous and Synchronous functions behavior in one blocking line

我有这个同步功能:

void AddItem(Item item)
{
    _context.Items.Add(item);
    _context.SaveChanges();
}

和异步函数:

async Task AddItemAsync(Item item)
{
    _context.Items.Add(item);
    await _context.SaveChangesAsync();
}

这些函数有什么区别吗?我的项目中有很多这样的功能。只需获取一个对象的实例,数据库中的 CRUD 和 return 结果。我需要定义我的函数 Asynchronous 吗?我看到一个视频说异步编程要好得多。我知道如果我有阻塞调用和一些独立的工作,最好使用异步编程。但是这里呢?我必须说,在视频中他选择使用代码块 2。
我是否从代码块 2 中获得优势?

编辑:

我知道 async/await 的模式及其用法。我的问题是这两个函数具有相似的行为(不在线程池中)但是代码块 2 在这个特定场景中有什么优势吗?

当“SaveChangesAsync()”真正开始一个新任务时(即使用 Task.Run()),代码块 2 是异步的。 但是任务可能在UI-thread(主进程线程)中的运行,此时他有空。 这就是为什么您看不到已使用的线程池线程的原因。

因此代码块 2 不会立即阻塞调用者(调用线程)和 returns。

此致