如果進程在與我們的應用程序服務器不同的 cpu 上繼續,使用 async/await 方法會非常有用。例如,數據庫查詢在數據庫服務器上運行,查詢運行時無需阻塞應用程序線程。你可以從這里查看。讓我們看看那個 c# 代碼塊 public async Task SaveAsync(User user) { using (DataContext ctx = new DataContext()) { ctx.User.Add(user); // database does its job while we are waiting await ctx.SaveChangesAsync(); } }那么下面的 goroutine 代碼有同樣的效果嗎?func (u *User) Create(userModel *model.User) error {var err errorvar wg sync.WaitGroup//or channel can be used for sync wg.Add(1) //wg := make(chan int)go func() { defer wg.Done(). //wg <- 1 _, err = u.Transaction.User. Create(). SetAge(userModel.Age). SetName(userModel.Name). SetIsDeleted(false). Save(u.Ctx) }()wg.Wait() // <-wgif err !=nil{ return err}return nil}
1 回答

呼如林
TA貢獻1798條經驗 獲得超3個贊
Goroutines 和 async/await 是異步編程的不同方法。在引擎蓋下,您有 P 進程 M CPU 內核和 G 協程。您的語言運行時操作它們 - 檢查何時應該停止(未計劃從實際進程,因此 CPU 內核)和其他應該被安排到內核。
什么方法更好?這取決于開發商。至于我 async/await 有更多的語法糖,goroutines 在編程方面更明確。所以第一個可以更簡潔,第二個 - 在諸如此類的復雜情況下更容易理解select {..}
。
- 1 回答
- 0 關注
- 124 瀏覽
添加回答
舉報
0/150
提交
取消