Sangat membantu untuk memahami dasar-dasar async
/ await
karena abstraksinya agak bocor dan memiliki sejumlah jebakan.
Pada dasarnya, Anda memiliki dua opsi:
-
Tetap sinkron. Dalam hal ini, aman menggunakan
.Result
dan.Wait()
pada panggilan async, masing-masing, mis. sesuatu seperti// Insert: collection.InsertOneAsync(user).Wait(); // FindAll: var first = collection.Find(p => true).ToListAsync().Result.FirstOrDefault();
-
Pergi async di basis kode Anda. Sayangnya, melakukan async cukup 'menular', jadi Anda mengubah hampir semuanya menjadi async, atau tidak. Hati-hati, mencampurkan sinkronisasi dan asinkron secara tidak benar akan menyebabkan kebuntuan . Menggunakan async memiliki sejumlah keuntungan, karena kode Anda dapat terus berjalan selama MongoDB masih berfungsi, mis.
// FindAll: var task = collection.Find(p => true).ToListAsync(); // ...do something else that takes time, be it CPU or I/O bound // in parallel to the running request. If there's nothing else to // do, you just freed up a thread that can be used to serve another // customer... // once you need the results from mongo: var list = await task;