我正在开发一个 httpHandler 来为我的 web 应用程序提供调整大小的图像。如果请求的图像和指定的 Sixe 不存在,我将创建该图像。
问题是如果两个(或更多)请求同时到达服务器并请求必须创建的图像。我怎样才能防止这种情况发生?如何在第一次请求创建图像所需的时间内锁定代码?创建图像时,第二个(以及后续)请求将从文件系统获取创建的图像。
谢谢!
// 尼克
我正在开发一个 httpHandler 来为我的 web 应用程序提供调整大小的图像。如果请求的图像和指定的 Sixe 不存在,我将创建该图像。
问题是如果两个(或更多)请求同时到达服务器并请求必须创建的图像。我怎样才能防止这种情况发生?如何在第一次请求创建图像所需的时间内锁定代码?创建图像时,第二个(以及后续)请求将从文件系统获取创建的图像。
谢谢!
// 尼克
只需使用 C# 简单的锁定机制。创建一个所有线程共享的静态对象(可能使用单例来包装此操作)并使用双重检查锁定:
if (!pictureExists)
{
lock (_syncRoot) // This is the shared object to lock by
{
if (!pictureExists) // double checked
{
// create it
}
}
}