C#中await和GetAwaiter()的区别

Pra*_*eep 5 c# asynchronous async-await

我有以下方法对我来说很好用:

1.这是使用“异步等待”方法:

public async Task AddClients(string clientId)
{
   bool isAlreadyAdded = await CheckIsClientExists(clientId);
   if(isAlreadyAdded)
   {
     await AddNewClientToGroup(clientId);
   }
}
Run Code Online (Sandbox Code Playgroud)

2.这是使用 GetAwaiter() 方法的方法:

public async Task AddClients(string clientId)
{
   bool isAlreadyAdded = await CheckIsClientExists(clientId);
   if(isAlreadyAdded)
   {
      AddNewClientToGroup(clientId).GetAwaiter().GetResult();
   }
}
Run Code Online (Sandbox Code Playgroud)

我看过链接Async await vs GetAwaiter().GetResult() 和 callback。而这并没有解释 GetAwaiter() 导致死锁情况的原因和方式。

谁能解释这两种方法之间的区别,即 await 和 GetAwaiter()?