Monotouch data synchronization - why does my code sometimes cause sqlite errors?

I have the following calls (actually a few more than this - this is the general method that is set here):

ThreadPool.QueueUserWorkItem(Database.Instance.RefreshEventData);
ThreadPool.QueueUserWorkItem(Database.Instance.RefreshLocationData);
ThreadPool.QueueUserWorkItem(Database.Instance.RefreshActData);

1st point - is it normal to call methods that call WCF services like this? I tried the daisy, clinging to them, and it was a mess.

An example of one of the update methods described above (they all follow the same pattern, just call different services and populate different tables):

public void RefreshEventData (object state)
        {
            Console.WriteLine ("in RefreshEventData");
            var eservices = new AppServicesClient (new BasicHttpBinding (), new EndpointAddress (this.ServciceUrl));

            //default the delta to an old date so that if this is first run we get everything
            var eventsLastUpdated = DateTime.Now.AddDays (-100);

            try {
                eventsLastUpdated = (from s in GuideStar.Data.Database.Main.Table<GuideStar.Data.Event> ()
                    orderby s.DateUpdated descending
                    select s).ToList ().FirstOrDefault ().DateUpdated;

            } catch (Exception ex1) {
                Console.WriteLine (ex1.Message);
            }

            try {
                eservices.GetAuthorisedEventsWithExtendedDataAsync (this.User.Id, this.User.Password, eventsLastUpdated);
            } catch (Exception ex) {
                Console.WriteLine ("error updating events: " + ex.Message);
            }

            eservices.GetAuthorisedEventsWithExtendedDataCompleted += delegate(object sender, GetAuthorisedEventsWithExtendedDataCompletedEventArgs e) {

                try {

                    List<Event> newEvents = e.Result.ToList ();

                    GuideStar.Data.Database.Main.EventsAdded = e.Result.Count ();

                    lock (GuideStar.Data.Database.Main) {
                        GuideStar.Data.Database.Main.Execute ("BEGIN");

                        foreach (var s in newEvents) {

                            GuideStar.Data.Database.Main.InsertOrUpdateEvent (new GuideStar.Data.Event { 
                                Name = s.Name, 
                                DateAdded = s.DateAdded, 
                                DateUpdated = s.DateUpdated, 
                                Deleted = s.Deleted, 
                                StartDate = s.StartDate,
                                Id = s.Id, 
                                Lat = s.Lat, 
                                Long = s.Long   
                            });

                        }

                        GuideStar.Data.Database.Main.Execute ("COMMIT");
                        LocationsCount = 0;
                    }
                } catch (Exception ex) {
                    Console.WriteLine("error InsertOrUpdateEvent " + ex.Message);
                } finally {
                    OnDatabaseUpdateStepCompleted (EventArgs.Empty);
                }

            };
        }

OnDatabaseUpdateStepCompleted - simply repeats the updateComplete counter when it is called and when it knows that all services have returned, it deletes the waiting counter and the application continues.

1- "", : http://monobin.com/__m6c83107d

, - ? , . QueueUserWorkItem, ? /? :

public void InsertOrUpdateEvent(Event festival){

            try {
                if (!festival.Deleted) {
                    Main.Insert(festival, "OR REPLACE");
                }else{
                    Main.Delete<Event>(festival);
                }
            } catch (Exception ex) {
                Console.WriteLine("InsertOrUpdateEvent failed: " + ex.Message);
            }

        }

: , sqlite?

://

+3
2

, , :

SqlLite ? - , ( ). , ?

, MT GC . , ? , (tabcontrollers, ), - , GC'ed.

, ? , .

0

Sqlite .

Sqlite , , , SQLite.

:

lock (db){
      // Do your query or insert here
}
+3

Source: https://habr.com/ru/post/1754466/


All Articles