/// <param name="passiveNodeDefinitions">The passive skill tree definition</param> /// <param name="runOnThreadPool">If true, all tasks are run on the thread pool instead of on the calling /// thread. I/O operations will always run asynchronously regardless of this parameter.</param> public GameData( IEnumerable <PassiveNodeDefinition> passiveNodeDefinitions, bool runOnThreadPool = false) { var asyncLazyFlags = runOnThreadPool ? AsyncLazyFlags.None : AsyncLazyFlags.ExecuteOnCallingThread; _passiveTree = new AsyncLazy <PassiveTreeDefinition>( () => Task.FromResult(new PassiveTreeDefinition(passiveNodeDefinitions.ToList())), asyncLazyFlags); _baseItems = new AsyncLazy <BaseItemDefinitions>( async() => await BaseItemJsonDeserializer.DeserializeAsync(runOnThreadPool), asyncLazyFlags); _skills = new AsyncLazy <SkillDefinitions>( async() => await SkillJsonDeserializer.DeserializeAsync(runOnThreadPool), asyncLazyFlags); _statTranslators = new AsyncLazy <StatTranslators>( async() => await StatTranslation.StatTranslators.CreateAsync(runOnThreadPool), asyncLazyFlags); _characterBaseStats = new AsyncLazy <CharacterBaseStats>( GameModel.CharacterBaseStats.CreateAsync, asyncLazyFlags); _monsterBaseStats = new AsyncLazy <MonsterBaseStats>(GameModel.MonsterBaseStats.CreateAsync, asyncLazyFlags); }