首页 新闻 会员 周边 捐助

FileStream异步写文件互斥问题,分不多,但希望解决下,谢谢

0
悬赏园豆:10 [已解决问题] 解决于 2010-07-21 15:22

题目可能起的不对,具体意思见我下面详细描述吧:

现在我要用Silverlight+wcf上传文件,由于wcf的宿主是IIS,所以wcf服务只暴露了异步调用接口,

上传文件的思路是将文件读入客户端的内存,然后调用异步接口循环读取字节流,这时候问题出现了:

因为是异步的,所以循环的时候他不会自动去阻塞写文件的线程,比如说一个文件是10240个字节,每次我读1024个字节到数组,这时候要循环十次才能把文件写入到服务器,但是这十次并不是想象中的队列方式执行,而是几乎同时运行的,这个时候就可能因为硬盘性能跟不上,第二步没写完数据,第三步就开始写数据了,例如下面这段代码:

1 using (System.IO.FileStream fs = new System.IO.FileStream(uploadFolder + @"\" + fileName, fileMode, System.IO.FileAccess.Write, System.IO.FileShare.ReadWrite))
2 {
3 fs.Write(fileContext, 0, fileContext.Length);
4 }

 

这个时候new System.IO.FileStream()内就会报   文件“G:\WORK\WCF\WCF Solution1\SilverlightApplication1.Web\upload\测试文件上传.EXE”正由另一进程使用,因此该进程无法访问此文件。

我想问一下,这个问题该怎么解决。谢谢大家

 

问题补充: 这个地方写文件因为每次传送过来1024个字节都要新建一个FileStream,所以感觉很不好解决,是个操作同步进行,根本保证不了执行顺序
cnb_mtime的主页 cnb_mtime | 初学一级 | 园豆:58
提问于:2010-07-10 11:23
< >
分享
最佳答案
0

最直接的方法就是用进程间的互斥锁,两进程互相协调。

收获园豆:10
Launcher | 高人七级 |园豆:45050 | 2010-07-10 11:34
进程间的互斥锁 - - 。不会昂,在Silverlight里面暴露的异步接口只能这样调用,能否详细解释下,谢谢
cnb_mtime | 园豆:58 (初学一级) | 2010-07-10 12:25
@{{°莪乖乖: 用命名的Mutex在进程间同步对同一个文件的读/写操作.
Launcher | 园豆:45050 (高人七级) | 2010-07-12 10:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册