首页新闻找找看学习计划

FileStream.WriteAsync 问题

0
悬赏园豆:10 [已解决问题] 解决于 2018-11-18 17:18

先晒从ftp下载文件的代码

FileStream outputStream = new FileStream(@"C:\Users\LZQ\Desktop\ud33.unity3d", FileMode.Create);
FtpWebRequest reqFTP = (FtpWebRequest)WebRequest.Create(new Uri("ftp://192.168.1.100/U3D/Car.unity3d"));
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential("", "");
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponseAsync().Result;
Stream ftpStream = response.GetResponseStream();
int bufferSize = 2048;
int readCount;
byte[] buffer = new byte[bufferSize];
readCount = ftpStream.ReadAsync(buffer, 0, bufferSize).Result;
while (readCount > 0)
{
outputStream.WriteAsync(buffer, 0, readCount);
readCount = ftpStream.ReadAsync(buffer, 0, bufferSize).Result;
}
ftpStream.Close();
outputStream.Close();
response.Close();

下载下来的unity3d文件打不开,
换成 outputStream.Write 方法后可以打开
有没有大神知道原因啊

左眼水星的主页 左眼水星 | 初学一级 | 园豆:45
提问于:2018-11-16 15:57
< >
分享
最佳答案
0

需要在 outputStream.WriteAsync(buffer, 0, readCount); 之前加上 await

收获园豆:10
dudu | 高人七级 |园豆:39113 | 2018-11-16 16:02

不加 await 是不是写入的顺序会乱

左眼水星 | 园豆:45 (初学一级) | 2018-11-16 16:25
其他回答(1)
0
outputStream.WriteAsync(buffer, 0, readCount);
readCount = ftpStream.ReadAsync(buffer, 0, bufferSize).Result;   

这样的代码,执行起来的话实际效果是这样的
readCount = ftpStream.ReadAsync(buffer, 0, bufferSize).Result;
outputStream.WriteAsync(buffer, 0, readCount);

所以你得听楼上的人的话。

爱编程的大叔 | 园豆:30519 (高人七级) | 2018-11-16 16:25

await outputStream.WriteAsync(buffer, 0, readCount);
readCount = ftpStream.ReadAsync(buffer, 0, bufferSize).Result;

这样的话感觉跟不用异步方法一样了

支持(0) 反对(0) 左眼水星 | 园豆:45 (初学一级) | 2018-11-16 16:35

@左眼水星:
说句不是很好听的话,你明显不熟悉异步代码,最好能在写完这份代码,正常工作完成后,
好好多看看微软的异步代码教程,或者干脆别用异步代码。
异步代码需要程序员对异步有一定的理论理解能力。如果不能理解,多看别人怎么写得也行。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30519 (高人七级) | 2018-11-16 16:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册