Alıştırma: SQLite'i zaman uyumsuz olarak kullanma
Uygulama düzgün çalışır, ancak veritabanı çok sayıda satır içeriyorsa, uygulama veritabanı sorguları ve diğer işlemleri gerçekleştirirken kullanıcı arabirimi yanıt vermemeye başlayabilir. Bu alıştırmada, uygulamayı zaman uyumlu SQLite API'sinden zaman uyumsuz sürüme dönüştüreceksiniz. Bu şekilde, veritabanınızda kaç sorgu yaparsanız yapın uygulamanız her zaman yanıt verir.
Zaman Uyumsuz bağlantı oluşturma
Kişiler projesinde PersonRepository.cs dosyasını açın.
Yöntemin
Init
tanımını olacak şekildeasync
değiştirin. yönteminin dönüş türünü olarakTask
değiştirin.conn
özelliğini olarakSQLiteAsyncConnection
değiştirin ve bağlantıyı başlatan yöntemdekiInit
kodu güncelleştirin.Zaman uyumlu
CreateTable
yöntemine yapılan çağrıyı zaman uyumsuzCreateTableAsync
yöntemiyle değiştirin.Tamamlanmış kod şu şekilde görünmelidir:
private SQLiteAsyncConnection conn; private async Task Init() { if (conn != null) return; conn = new SQLiteAsyncConnection(_dbPath); await conn.CreateTableAsync<Person>(); }
Tabloya zaman uyumsuz olarak öğe ekleme
yönteminin
AddNewPerson
tanımını olacak şekildeasync
değiştirin. yönteminin dönüş türünü olarakTask
değiştirin.await
Artık birasync
yöntem olduğundanInit
yöntem çağrısınaInit
anahtar sözcüğünü ekleyin.AddNewPerson
Zaman uyumsuz bir ekleme işlemi kullanarak yeniPerson
bir ekleme yöntemi güncelleştirin.Kod şu şekilde görünmelidir:
using System.Threading.Tasks; ... public async Task AddNewPerson(string name) { int result = 0; try { // Call Init() await Init(); // basic validation to ensure a name was entered if (string.IsNullOrEmpty(name)) throw new Exception("Valid name required"); result = await conn.InsertAsync(new Person { Name = name }); StatusMessage = string.Format("{0} record(s) added [Name: {1})", result, name); } catch (Exception ex) { StatusMessage = string.Format("Failed to add {0}. Error: {1}", name, ex.Message); } }
Bir tablodaki tüm öğeleri zaman uyumsuz olarak alma
GetAllPeople
Yöntem tanımını değiştirin. Bu yöntem olmalıasync
ve birTask<List<Person>>
nesne döndürmelidir.await
Yöntem çağrısına anahtar sözcüğünüInit
ekleyin.Zaman uyumsuz bir çağrı kullanarak sonuçları döndürmek için yöntemini güncelleştirin.
Kod şu şekilde görünmelidir:
public async Task<List<Person>> GetAllPeople() { try { await Init(); return await conn.Table<Person>().ToListAsync(); } catch (Exception ex) { StatusMessage = string.Format("Failed to retrieve data. {0}", ex.Message); } return new List<Person>(); }
PersonRepository.cs dosyasını kaydedin.
Zaman uyumsuz işlevselliği test edin
Çözüm Gezgini MainPage.xaml dosyasını genişletin ve MainPage.xaml.cs dosyasını açın.
Sınıfından zaman uyumsuz yöntemleri kullanmak için düğme tıklamalı olay işleyicilerinin
PersonRepository
her ikisini de değiştirin. veawait
anahtar sözcükleriniasync
kullanın:public async void OnNewButtonClicked(object sender, EventArgs args) { statusMessage.Text = ""; await App.PersonRepo.AddNewPerson(newPerson.Text); statusMessage.Text = App.PersonRepo.StatusMessage; } public async void OnGetButtonClicked(object sender, EventArgs args) { statusMessage.Text = ""; List<Person> people = await App.PersonRepo.GetAllPeople(); peopleList.ItemsSource = people; }
MainPage.xaml.cs dosyasını kaydedin.
Programı Windows ve Android'de derleyip çalıştırarak daha önce olduğu gibi çalıştığını doğrulayın.