Kerangka Kerja Entitas - Kueri Asinkron
Asynchronous programmingmelibatkan pelaksanaan operasi di latar belakang sehingga thread utama dapat melanjutkan operasinya sendiri. Dengan cara ini thread utama dapat menjaga antarmuka pengguna tetap responsif saat thread latar belakang memproses tugas yang sedang dikerjakan.
Entity Framework 6.0 mendukung operasi asynchronous untuk membuat kueri dan menyimpan data.
Operasi asinkron dapat membantu aplikasi Anda dengan cara berikut -
- Jadikan aplikasi Anda lebih responsif terhadap interaksi pengguna
- Tingkatkan kinerja aplikasi Anda secara keseluruhan
Anda dapat menjalankan operasi asinkron dengan berbagai cara. Tetapi kata kunci async / await diperkenalkan di .NET Framework 4.5 yang membuat pekerjaan Anda sederhana.
Satu-satunya hal yang perlu Anda ikuti adalah pola async / await seperti yang diilustrasikan oleh fragmen kode berikut.
Mari kita lihat contoh berikut (tanpa menggunakan async / await) di mana metode DatabaseOperations menyimpan siswa baru ke database dan kemudian mengambil semua siswa dari database dan pada akhirnya beberapa pesan tambahan dicetak di konsol.
class Program {
static void Main(string[] args) {
Console.WriteLine("Database Operations Started");
DatabaseOperations();
Console.WriteLine();
Console.WriteLine("Database Operations Completed");
Console.WriteLine();
Console.WriteLine("Entity Framework Tutorials");
Console.ReadKey();
}
public static void DatabaseOperations() {
using (var context = new UniContextEntities()) {
// Create a new student and save it
context.Students.Add(new Student {
FirstMidName = "Akram",
LastName = "Khan",
EnrollmentDate = DateTime.Parse(DateTime.Today.ToString())});
Console.WriteLine("Calling SaveChanges.");
context.SaveChanges();
Console.WriteLine("SaveChanges completed.");
// Query for all Students ordered by first name
var students = (from s in context.Students
orderby s.FirstMidName select s).ToList();
// Write all students out to Console
Console.WriteLine();
Console.WriteLine("All Student:");
foreach (var student in students) {
string name = student.FirstMidName + " " + student.LastName;
Console.WriteLine(" " + name);
}
}
}
}
Ketika kode di atas dijalankan, Anda akan menerima output berikut -
Calling SaveChanges.
SaveChanges completed.
All Student:
Akram Khan
Ali Khan
Ali Alexander
Arturo Anand
Bill Gates
Gytis Barzdukas
Laura Nornan
Meredith fllonso
Nino Olioetto
Peggy Justice
Yan Li
Entity Framework Tutorials
Mari gunakan async baru dan kata kunci menunggu dan buat perubahan berikut ke Program.cs
Tambahkan namespace System.Data.Entity yang akan memberikan metode ekstensi async EF.
Tambahkan namespace System.Threading.Tasks yang akan memungkinkan kita menggunakan jenis Tugas.
Memperbarui DatabaseOperations untuk ditandai sebagai async dan mengembalikan a Task.
Panggil SaveChanges versi Async dan tunggu penyelesaiannya.
Panggil versi Async dari ToList dan tunggu hasilnya.
class Program {
static void Main(string[] args) {
var task = DatabaseOperations();
Console.WriteLine();
Console.WriteLine("Entity Framework Tutorials");
task.Wait();
Console.ReadKey();
}
public static async Task DatabaseOperations() {
using (var context = new UniContextEntities()) {
// Create a new blog and save it
context.Students.Add(new Student {
FirstMidName = "Salman",
LastName = "Khan",
EnrollmentDate = DateTime.Parse(DateTime.Today.ToString())});
Console.WriteLine("Calling SaveChanges.");
await context.SaveChangesAsync();
Console.WriteLine("SaveChanges completed.");
// Query for all Students ordered by first name
var students = await (from s in context.Students
orderby s.FirstMidName select s).ToListAsync();
// Write all students out to Console
Console.WriteLine();
Console.WriteLine("All Student:");
foreach (var student in students) {
string name = student.FirstMidName + " " + student.LastName;
Console.WriteLine(" " + name);
}
}
}
}
Saat dieksekusi, ini akan menghasilkan keluaran sebagai berikut.
Calling SaveChanges.
Entity Framework Tutorials
SaveChanges completed.
All Student:
Akram Khan
Ali Khan
Ali Alexander
Arturo Anand
Bill Gates
Gytis Barzdukas
Laura Nornan
Meredith fllonso
Nino Olioetto
Peggy Justice
Salman Khan
Yan Li
Sekarang kodenya tidak sinkron, Anda dapat mengamati aliran eksekusi yang berbeda dari program Anda.
SaveChanges mulai mendorong Student baru ke database dan kemudian metode DatabaseOperations kembali (meskipun belum selesai dijalankan) dan alur program dalam metode Utama terus berlanjut.
Pesan kemudian ditulis ke konsol.
Utas yang dikelola diblokir pada panggilan Tunggu hingga operasi database selesai. Setelah selesai, sisa DatabaseOperations kami akan dieksekusi.
SaveChanges selesai.
Semua siswa diambil dari database dan ditulis ke Konsol.
Kami menyarankan Anda untuk menjalankan contoh di atas dengan cara langkah demi langkah untuk pemahaman yang lebih baik.