为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

斯蒂芬大帝 2018-12-06 17:03: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”正由另一进程使用,因此该进程无法访问此文件。

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

 

查看完整描述

1 回答

?
UYOU

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

查看完整回答
反对 回复 2019-01-21
  • 1 回答
  • 0 关注
  • 330 浏览
我要回答

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信