Ejemplo n.º 1
0
        /// <summary>
        /// 将为指定的 Key 清除。
        /// </summary>
        /// <param name="key">指定项的 Key。</param>
        protected override async Task RemoveValueCoreAsync(string key)
        {
            await LoadFromFileTask.ConfigureAwait(false);

            CT.Debug($"{key} = null", "Set");
            KeyValues.TryRemove(key, out _);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 为指定的 Key 存储指定的值。
        /// </summary>
        /// <param name="key">指定项的 Key。</param>
        /// <param name="value">要存储的值。</param>
        protected override async Task WriteValueCoreAsync(string key, string value)
        {
            value = value ?? throw new ArgumentNullException(nameof(value));
            value = value.Replace(Environment.NewLine, "\n");
            await LoadFromFileTask.ConfigureAwait(false);

            CT.Debug($"{key} = {value}", "Set");
            KeyValues[key] = value;
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 获取指定 Key 的值,如果不存在,需要返回 null。
        /// </summary>
        /// <param name="key">指定项的 Key。</param>
        /// <returns>
        /// 执行项的 Key,如果不存在,则为 null / Task&lt;string&gt;.FromResult(null)"/>。
        /// </returns>
        protected override async Task <string?> ReadValueCoreAsync(string key)
        {
            await LoadFromFileTask.ConfigureAwait(false);

            var value = KeyValues.TryGetValue(key, out var v) ? v : null;

            CT.Debug($"{key} = {value ?? "null"}", "Get");
            return(value);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 尝试重新加载此配置文件的外部修改(例如使用其他编辑器或其他客户端修改的部分)。
        /// <para>外部修改会自动同步到此配置中,但此同步不会立刻发生,所以如果你明确知道外部修改了文件后需要立刻重新加载外部修改,才需要调用此方法。</para>
        /// </summary>
        public async Task ReloadExternalChangesAsync()
        {
            // 如果之前正在读取文件,则等待文件读取完成。
            await LoadFromFileTask.ConfigureAwait(false);

            // 现在,强制要求重新读取文件。
            LoadFromFileTask = RequestReloadingFile();
            // 然后,等待重新读取完成。
            await LoadFromFileTask.ConfigureAwait(false);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 保存到文件
        /// </summary>
        /// <returns></returns>
        public async Task SaveAsync(int tryCount = 10)
        {
            await LoadFromFileTask.ConfigureAwait(false);

            await _saveLoop.JoinAsync(tryCount);
        }