小编use*_*400的帖子

ASP.NET lock()不起作用

我试图锁定一个静态字符串对象来访问缓存,lock()块在我的本地执行,但每当我将它部署到服务器时,它就永远锁定.我将每一步写入事件日志以查看进程并且锁定(对象)只会导致服务器上的死锁.lock()之后的命令永远不会执行,因为我在事件日志中看不到条目.以下是代码:

public static string CacheSyncObject = "CacheSync";
public static DataView GetUsers()
{

    DataTable dtUsers = null;
    if (HttpContext.Current.Cache["dtUsers"] != null)
    {
        Global.eventLogger.Write(String.Format("GetUsers() cache hit: {0}",dtUsers.Rows.Count));
        return (HttpContext.Current.Cache["dtUsers"] as DataTable).Copy().DefaultView;
    }

    Global.eventLogger.Write("GetUsers() cache miss");
    lock (CacheSyncObject)
    {
        Global.eventLogger.Write("GetUsers() locked SyncObject");

        if (HttpContext.Current.Cache["dtUsers"] != null)
        {
            Global.eventLogger.Write("GetUsers() opps, another thread filled the cache, release lock");
            return (HttpContext.Current.Cache["dtUsers"] as DataTable).Copy().DefaultView;
        }
Run Code Online (Sandbox Code Playgroud)

Global.eventLogger.Write("GetUsers()锁定SyncObject"); ==>这永远不会写入日志,这对我来说意味着,lock()永远不会执行.

asp.net caching locking

1
推荐指数
1
解决办法
3604
查看次数

标签 统计

asp.net ×1

caching ×1

locking ×1