private async void ReadDatabase()
        {
            _locker.Reset();
            await Task.Factory.StartNew(async() =>
            {
                try
                {
                    string text = await _fileAccessor.ReadFile(DatabaseFileUri);
                    if (string.IsNullOrEmpty(text))
                    {
                        CreateModel();
                        return;
                    }

                    text = ProductsDatabaseEncrypter.Decrypt(text);

                    XmlSerializer serializer = new XmlSerializer(typeof(ProductsDatabaseModel));
                    using (TextReader reader = new StringReader(text))
                    {
                        _model = (ProductsDatabaseModel)serializer.Deserialize(reader);
                    }
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex.Message);
                    CreateModel();
                }
                finally
                {
                    _locker.Set();
                }
            });
        }
        private async void WriteDatabase()
        {
            _locker.Reset();
            await Task.Factory.StartNew(async() =>
            {
                _model.Version = DatabaseVersion;

                XmlSerializer serializer = new XmlSerializer(typeof(ProductsDatabaseModel));
                StringBuilder builder    = new StringBuilder();
                using (TextWriter writer = new StringWriter(builder))
                {
                    serializer.Serialize(writer, _model);
                }

                string encodedText = ProductsDatabaseEncrypter.Encrypt(builder.ToString());
                await _fileAccessor.WriteFile(DatabaseFileUri, encodedText);

                _locker.Set();
            });
        }