1 string cacheFilePath = "D:\test.html";
2 string url = "http://www.baidu.com/";
3
4 FileInfo cacheFileInfo = new FileInfo(cacheFilePath);
5
6 lock (cacheFileInfo)
7 {
8
9
10 WebClient wc = new WebClient();
11 byte[] pageData = wc.DownloadData(url);
12 FileStream cacheFileStream;
13 cacheFileStream = cacheFileInfo.Create();
14 cacheFileStream.Write(pageData, 0, pageData.Length);
15 cacheFileStream.Close();
16 cacheFileStream.Dispose();
17
18 context.Response.TransmitFile(cacheFilePath);
19
20 }
我用了lock (cacheFileInfo)
是不是其它进程访问 cacheFilePath = "D:\test.html"; 这个文件的时候,会排队?
因为 我使用了 WebClient wc = new WebClient(); 下载一个网页html,然后保存 ,当没保存完的时候,可能会有进程去访问这个文件,为了避免在这个过程中出现错误,我用了lock
但是我发现还是有错误,可能我用错了 lock
5 回答
守着星空守着你
TA贡献1799条经验 获得超8个赞
这里的lock锁定的是一个对象,不是文件,虽然你用的是一个FileInfo。
lock是互斥锁,当一个调用需要进入lock的代码的时候,必须是别的lock调用已经退出了。相当于洗手间的锁,一个洗手间只能同时一个人使用,进去一个人,就把洗手间门锁起来,别的人还想使用洗手间就只能排队了,当使用洗手间的人出来的时候,把锁打开,此时,排队使用洗手间的人中最前面的就可以使用了。
从你的要求来看,你想对文件进行锁处理,这个锁处理正常情况下,当你打开一个文件进行写的时候,文件系统会禁止该文件的再次打开,除非之前的打开写操作关闭了。此时,你可以在读的地方通过捕获异常来检测当前文件是否已经下载完成。
肥皂起泡泡
TA贡献1829条经验 获得超6个赞
@foxidea: 你不要鎖定this,要定義一個object。如果是this,效率 很低。如果要效率,可以參考其他的鎖定。lock 是最簡單的鎖定。
- 5 回答
- 0 关注
- 547 浏览
添加回答
举报
0/150
提交
取消