奇怪的线程读取问题?

zquboy zquboy 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
描述:
一个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();
}
...全文
评论 10
收藏 已收藏
分享
返回顶部
zquboy
C# 111,129 成员 642,538 内容