Chúng tôi đang sử dụng Xamarin để viết mã # C với SQLite cho Android và iOS là gì. Tuy nhiên về cách sử dụng SQLite, tôi dường như có một sự hiểu lầm về khái niệm:việc sử dụng chính xác cho sqlite trên khóa hoặc async
What are the best practices for SQLite on Android?
Theo stackoverflow trả lời nó nói - một helper và một kết nối db. Sử dụng khóa xung quanh nó để đảm bảo chỉ có một luồng truy cập vào sqlite db bất cứ lúc nào.
Câu hỏi của tôi là - nếu đó là trường hợp - sử dụng cho async là gì?
Tôi cố gắng để sử dụng async với mã đồng bộ - và mã đã cho tôi biên dịch lỗi chính đáng để tránh sự bế tắc.
Why can't I use the 'await' operator within the body of a lock statement?
public async Task InsertAsync<T> (T item){
lock (mutex) {
await asyncConnection.InsertAsync (item);
}
}
public async Task InsertOrUpdateAsync<T> (T item){
lock (mutex) {
int count = await asyncConnection.UpdateAsync (item);
if (0 == count) {
await asyncConnection.InsertAsync (item);
}
}
}
thất bại. Tuy nhiên - nếu tôi sẽ sử dụng khóa để đảm bảo tôi đang sử dụng một kết nối một thread tại một thời điểm như là một thực hành tốt nhất trong sqlite - tại sao có một thư viện sqlite async ở tất cả?
Và tại sao là một số chủ đề thúc đẩy việc sử dụng SQLite async trên web.
các thực hành tốt nhất thực sự cho sqlite trong iphone android và là gì? Chỉ cần sử dụng phiên bản đồng bộ hóa?
Sự khác biệt duy nhất tôi thấy là câu lệnh 'using'.Trong nội bộ nó sử dụng một 'AsyncSemaphore', mà thẳng thắn im không chắc chắn làm thế nào nó khác với một' SemaphoreSlim'. Có bất kỳ lợi ích nào khác không? –
@YuvalItzchakov Trong triển khai của tôi, nó sử dụng 'SemaphoreSlim'. Lợi ích là bạn sử dụng những gì bạn cần, và những gì bạn cần là một ** phạm vi khóa async ** vì vậy bạn đóng gói tất cả các quyết định vào một lớp học. Điều đó khuyến khích tái sử dụng và làm giảm các lỗi như của bạn, nơi bạn bỏ bê để phát hành sempahore. – i3arnon
Đó là sự khác biệt giữa việc sử dụng 'Monitor.Enter' và' Monitor.Exit' trực tiếp thay vì sử dụng 'khóa'. Trong khi bạn * có thể * làm điều đó, bạn * không nên *. – i3arnon