From fb50123af0f7670c87d8c3eac82f1605d9c9ab72 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Fri, 26 Apr 2019 10:40:28 -0400 Subject: [PATCH] init task --- src/Core/Services/LiteDbStorageService.cs | 46 ++++++++++++++++------- 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/src/Core/Services/LiteDbStorageService.cs b/src/Core/Services/LiteDbStorageService.cs index e0ee56c6e..2278636b6 100644 --- a/src/Core/Services/LiteDbStorageService.cs +++ b/src/Core/Services/LiteDbStorageService.cs @@ -15,45 +15,63 @@ namespace Bit.Core.Services }; private readonly string _dbPath; private LiteCollection _collection; + private Task _initTask; public LiteDbStorageService(string dbPath) { _dbPath = dbPath; } - public void Init() + public Task InitAsync() { - if(_collection == null) + if(_collection != null) { - var db = new LiteDatabase($"Filename={_dbPath};"); - _collection = db.GetCollection("json_items"); + return Task.FromResult(0); } + if(_initTask != null) + { + return _initTask; + } + Task doTask() + { + + try + { + var db = new LiteDatabase($"Filename={_dbPath};"); + _collection = db.GetCollection("json_items"); + return Task.FromResult(0); + } + finally + { + _initTask = null; + } + }; + _initTask = doTask(); + return _initTask; } - public Task GetAsync(string key) + public async Task GetAsync(string key) { - Init(); + await InitAsync(); var item = _collection.Find(i => i.Id == key).FirstOrDefault(); if(item == null) { - return Task.FromResult(default(T)); + return default(T); } - return Task.FromResult(JsonConvert.DeserializeObject(item.Value, _jsonSettings)); + return JsonConvert.DeserializeObject(item.Value, _jsonSettings); } - public Task SaveAsync(string key, T obj) + public async Task SaveAsync(string key, T obj) { - Init(); + await InitAsync(); var data = JsonConvert.SerializeObject(obj, _jsonSettings); _collection.Upsert(new JsonItem(key, data)); - return Task.FromResult(0); } - public Task RemoveAsync(string key) + public async Task RemoveAsync(string key) { - Init(); + await InitAsync(); _collection.Delete(i => i.Id == key); - return Task.FromResult(0); } private class JsonItem