
最后居然是这个语法的问题,虽然不知道为什么会影响到我的结果。。。。但是问题就是出现在这一段代码上。。。。要去补补基础知识了。。难道这两个有啥区别
// 对 using(var sw = new StreamWriter(compileScript)) { sw.Write(_submission.Cmd); } // 错 using var sw = new StreamWriter(compileScript); sw.Write(_submission.Cmd); 感谢#7 #8楼的回答。。。破案了,第二种写法后面需要马上Flush(如果下面需要需要立即读取该内容的化)
1 liuhan907 2021-04-16 19:39:11 +08:00 via Android sw 的作用域不一样,其它没了。 |
2 zxCoder OP @liuhan907 那就很奇怪了。。。总之这两个写法一换程序就 ok 了。。。 而且 sw 后面也并没有再用到,其他语句我都尽量注释掉了 |
3 akira 2021-04-16 20:53:47 +08:00 |
4 Zhuzhuchenyan 2021-04-16 23:04:44 +08:00 感觉可以再深入一下,根据我的理解这两个语句应该是等价的。 能否提供一个最小的出现 bug 的情形呢? |
5 Youen 2021-04-16 23:15:52 +08:00 可以反编译一下看看 IL 有什么不同 |
6 Fx8m 2021-04-16 23:40:33 +08:00 第一个运行完后会清理资源。 两个应该是一样的效果啊,为什么会出错。 |
7 hyb1996 2021-04-17 01:04:59 +08:00 via Android 第二个没有立即 flush? |
8 mingl0280 2021-04-17 01:20:47 +08:00 via Android 有区别,第二个如果没等到默认的 flush 执行就不会输出,第一个执行完必定带一下 flush+close... |
9 zxCoder OP |
11 mingl0280 2021-04-18 03:53:47 +08:00 via Android @zxCoder msdn 不是有一段关于 IDisposable 和 StreamWriter 不是线程安全和同步的的说明么?你不看文档的么? https://docs.microsoft.com/en-us/dotnet/api/system.io.streamwriter?view=net-5.0 |