版权声明:本文为博主原创文章,未经博主允许不得转载。 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进行控制