c# - 现有文件部分的锁定检查

标签 c# asp.net .net multithreading locking

在我的网站中,我使用 Controller 来生成图像的缩略图。我的代码如下所示:

var filePath = getThumbnailPath(); 
if (!File.Exists(filePath) 
{
    ... create thumbnail  
}    
return new Filestream(...)

问题是,如果两个用户请求相同的缩略图,并且如果未创建该缩略图,则在创建它时我会遇到异常。 如何在不引入太多开销的情况下有效地使用文件名对象上的锁?

根据 Aristos 的评论重构代码:

 Mutex m = new Mutex(false, originalImagePath);
 m.WaitOne();
 try
 {
     if (!File.Exists(originalImagePath))
     { 
          ... create thumbnail
     }
 }
 finally
 {
     m.ReleaseMutex();
 } 

最佳答案

将缩略图的创建委托(delegate)给其他服务。用户将产生创建缩略图的请求。另一个服务将使用该请求并完成实际工作。

什么是服务,您可以自己选择。它可以是 WCF 服务、Windows 服务、消息队列或其他东西。

直接在 ASP.NET 网站中使用锁定通常不是一个好主意,因为它会引入瓶颈。

关于c# - 现有文件部分的锁定检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11870718/

相关文章:

.net - Amazon S3 元数据 key 带有前缀,如何避免这种情况?

c# - ADAL token 获取异常

c# - 使用 .AsFactory() 确定运行时类型

c# - 从 Azure 辅助角色建立 WSManConnection

c# - Ultrachart基础设施

c# - 动态选择和更新 LINQ 结果集中的列值

c# - 异步/等待 - 等待未按预期举行

javascript - 从 SQL 查询获取值到文本框

c# - ASP.NET MVC 3 学习计划

.net - 将两个 Int32 组合成一个 Int64