C#关于WebService中Lock锁是否起作用的测试积累

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_41660162/article/details/80177518

测试Lock的供调用方法

private static object lockObjet = new object();
[WebMethod]
public string HelloWorld()
{
    //lock (lockObjet)
    {
        string a = "无Locktest如果时间间隔相差等于30秒,说明是单线程访问" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
        WriteTraceLog(a);
        System.Threading.Thread.Sleep(30 * 1000);
    }

    lock (lockObjet)
    {
        string a = "Locktest如果时间间隔相差等于30秒,说明Lcok起作用了"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
        WriteTraceLog(a);
        System.Threading.Thread.Sleep(30 * 1000);
    }
    return "Hello World";
}

写访问时间日志的方法

private bool WriteTraceLog(string aLogText)
{
    string LogPath = "c:\\HisLog\\" ;
    string aLogFileName = "WebServiceLock测试.log";
    string aLogPath = LogPath;
    if (!Directory.Exists(LogPath))
        Directory.CreateDirectory(LogPath);

    try
    {
        string FullLogText = aLogText;
        string LogFileName;
        LogFileName = aLogPath + aLogFileName ;
        FileStream fs = new FileStream(LogFileName, FileMode.Append);
        StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);

        sw.WriteLine(FullLogText);
        sw.Close();

        return true;
    }
    catch
    {
        return false;
    }
}

测试

进行连续两次的访问
这里写图片描述

测试结果

这里写图片描述

结论

  • 在供调用方法的开始位置写日志,发现连续的两次调用写入的时间是一样的,说明Webservice的调用时不需要排队的。
  • 在lock (lockObjet)中写的日志第一次访问和第二次访问的时间却差了30秒,正好是第一次访问休眠的时间,说明Lock锁起到了作用。
  • 那么当我们在webservice中处理需要进行单例执行的操作时,可以使用Lock进行控制

猜你喜欢

转载自blog.csdn.net/weixin_41660162/article/details/80177518