今天在调试Windows Service的时候遇到了一点麻烦,服务调用的业务处理类中有一段文件
解压缩的处理。在debug状态下,文件解压缩处理老是失败,起初以为是解压缩程序有问题,
经过一步一步的跟踪调试后,发现抛出的错误是被解压缩的文件正在被别的进程使用,
终于找到了错误的位置,定位到错误后着实吓了一身冷汗。服务调用的业务处理进程是通过
Timer事件每5秒钟触发一次的,如果这个进程正在处理,那是不会有第2个相同的进程同时处理,
出现这种问题肯定是有2个相同的进程同时在处理,难道是前面的Timer事件处理的不对。如果
是那样的话应该怎样处理呢?这一系列的问题立马出现在脑海中,在梳理了一下思路后,决定
继续调式查找出真正的原因,谢天谢地最后终于找到了原因。
我是通过如下语句来判断是否执行业务进程的
try
{
if (readyToProcess)
{
readyToProcess = false;
LaunchProcess();
currentProcess = null;
readyToProcess = true;
}
}
catch (Exception ex)
{
readyToProcess = true;
mLog.Error(ex.Message);
}
由于业务流程处理复杂,每执行一次可能需要很长时间,在这期间Timer事件被触发了
若干次,在调试状态下就会出现这种情况,本次业务处理流程刚好改变判断标示的值为true,
下一个事件刚好进入,本次业务处理流程刚好还没有全部调试结束或者下一个处理还没有改变
判断标示的值为false,此时如果调式停留的时间过长,下一个Timer事件又被触发并且进入到
了处理流程中,这样就会出现篇头所说的问题。
或许这是调式时经常遇到的问题,只是之前没有太在意而已。
解压缩的处理。在debug状态下,文件解压缩处理老是失败,起初以为是解压缩程序有问题,
经过一步一步的跟踪调试后,发现抛出的错误是被解压缩的文件正在被别的进程使用,
终于找到了错误的位置,定位到错误后着实吓了一身冷汗。服务调用的业务处理进程是通过
Timer事件每5秒钟触发一次的,如果这个进程正在处理,那是不会有第2个相同的进程同时处理,
出现这种问题肯定是有2个相同的进程同时在处理,难道是前面的Timer事件处理的不对。如果
是那样的话应该怎样处理呢?这一系列的问题立马出现在脑海中,在梳理了一下思路后,决定
继续调式查找出真正的原因,谢天谢地最后终于找到了原因。
我是通过如下语句来判断是否执行业务进程的
try
{
if (readyToProcess)
{
readyToProcess = false;
LaunchProcess();
currentProcess = null;
readyToProcess = true;
}
}
catch (Exception ex)
{
readyToProcess = true;
mLog.Error(ex.Message);
}
由于业务流程处理复杂,每执行一次可能需要很长时间,在这期间Timer事件被触发了
若干次,在调试状态下就会出现这种情况,本次业务处理流程刚好改变判断标示的值为true,
下一个事件刚好进入,本次业务处理流程刚好还没有全部调试结束或者下一个处理还没有改变
判断标示的值为false,此时如果调式停留的时间过长,下一个Timer事件又被触发并且进入到
了处理流程中,这样就会出现篇头所说的问题。
或许这是调式时经常遇到的问题,只是之前没有太在意而已。