描述:
一个Console Application, 多线程环境下操作文件, 但保证在任一时刻都只有一个
线程执行SomeMethod成员函数。该函数首先将文件长度截为零, 然后将对象Serialize
到文件中。
BUG:
当Application运行中关闭Console窗体,文件的长度可能为零(有时正常,有时为零)。
尝试解决办法:
在函数中加入try, finally块,失败。
在函数中加入Thread.BeginCriticalRegion() & Thread.EndCriticalRegion() , 失败.
问题:
如果注释掉"stream.SetLength(0);"行,程序不会出现该BUG.
我的理解是,当线程运行到 serializer.Serialize 函数的时候刚好碰到我关闭Console窗口,
线程给强制退出,而stream还没来得及Write.
如果修改该Bug可以在SetLength(0)前做一个备份,但我期望能有更好的解决办法。
代码:
public static SomeMethod()
{
stream.SetLength(0);
...
serializer.Serialize(stream, src);
...
stream.Flush();
}