public async Task <CreateNewResult> CreateNew(String search) { Task <CreateNewResult> createNewTask = Task.Run(() => { LockStart("CreateNew"); try { return(_irpyteDownloader.Create(search) .ContinueWith(task => { if (task.IsFaulted) { logger.Error(task.Exception, "CreateNew task error"); return new CreateNewResult(task.Exception); } else { try { var id = task.Result.id; var appConfig = DB.Instance.GetConfig(); appConfig.wallpaperId = id; appConfig.imageFileNames.Clear(); appConfig.searchTerms = search; DB.Instance.UpdateConfig(appConfig); logger.Info($"Successfully updated new wallpaper id {id}"); return new CreateNewResult(); } catch (Exception e) { logger.Error(e, "CreateNew while updating db"); return new CreateNewResult(e); } } })); } finally { LockEnd("CreateNew"); } }); return(await createNewTask); }