mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-25 04:59:01 +08:00
refactor(storage): 优化文件存储删除操作的线程安全性
- 为Delete方法添加详细的参数注释说明 - 添加锁机制确保文件删除操作的线程安全 - 使用GetOrAdd方法管理路径对应的锁对象 - 实现DeleteAsync异步删除方法 - 优化代码结构提高可读性和维护性
This commit is contained in:
parent
5e8887145b
commit
4c547258a5
@ -89,21 +89,32 @@ public sealed class FileStorage : IFileStorage
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 删除指定键的存储项
|
/// 删除指定键的存储项
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="key">存储键</param>
|
/// <param name="key">存储键,用于标识要删除的存储项</param>
|
||||||
public void Delete(string key)
|
public void Delete(string key)
|
||||||
{
|
{
|
||||||
|
// 将键转换为文件路径
|
||||||
var path = ToPath(key);
|
var path = ToPath(key);
|
||||||
|
|
||||||
|
// 获取或创建与路径关联的锁对象,确保线程安全
|
||||||
var keyLock = _keyLocks.GetOrAdd(path, _ => new object());
|
var keyLock = _keyLocks.GetOrAdd(path, _ => new object());
|
||||||
|
|
||||||
|
// 使用锁确保同一时间只有一个线程操作该路径的文件
|
||||||
lock (keyLock)
|
lock (keyLock)
|
||||||
{
|
{
|
||||||
|
// 如果文件存在,则删除该文件
|
||||||
if (File.Exists(path))
|
if (File.Exists(path))
|
||||||
File.Delete(path);
|
File.Delete(path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 异步删除指定键的存储项
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="key">存储键,用于标识要删除的存储项</param>
|
||||||
|
/// <returns>表示异步操作的任务</returns>
|
||||||
public Task DeleteAsync(string key)
|
public Task DeleteAsync(string key)
|
||||||
{
|
{
|
||||||
|
// 在线程池中运行同步删除方法以实现异步操作
|
||||||
return Task.Run(() => Delete(key));
|
return Task.Run(() => Delete(key));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user