关于.net lock 关键字的用法,好处不太理解

 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

隔江千里
浏览 548回答 5
5回答

守着星空守着你

这里的lock锁定的是一个对象,不是文件,虽然你用的是一个FileInfo。 lock是互斥锁,当一个调用需要进入lock的代码的时候,必须是别的lock调用已经退出了。相当于洗手间的锁,一个洗手间只能同时一个人使用,进去一个人,就把洗手间门锁起来,别的人还想使用洗手间就只能排队了,当使用洗手间的人出来的时候,把锁打开,此时,排队使用洗手间的人中最前面的就可以使用了。 从你的要求来看,你想对文件进行锁处理,这个锁处理正常情况下,当你打开一个文件进行写的时候,文件系统会禁止该文件的再次打开,除非之前的打开写操作关闭了。此时,你可以在读的地方通过捕获异常来检测当前文件是否已经下载完成。

万千封印

定義 類屬性 OBJECT O=new objec(); lock(0){ }這樣,不是你寫的那樣。

犯罪嫌疑人X

我还是不理解 我想锁住一个文件 ,当并发访问这个文件的时候,排队访问 互不影响

肥皂起泡泡

@foxidea: 你不要鎖定this,要定義一個object。如果是this,效率 很低。如果要效率,可以參考其他的鎖定。lock 是最簡單的鎖定。
打开App,查看更多内容
随时随地看视频慕课网APP