KWC*_*KWC 0 .net c# binary-data streamwriter async-await
我正在尝试使旧方法异步。
它从数据库中获取 BLOB 并将其作为文件写入磁盘。
但是,没有异步版本的BinaryWriter.
我可以用StreamWriter代替吗?因为它有WriteAsync方法。有什么区别?有什么缺点吗?
部分代码:
OracleParameter returnParam = new OracleParameter("blob", OracleDbType.Blob);
command.Parameters.Add(returnParam);
await command.ExecuteNonQueryAsync();
OracleBlob blob = returnParam.Value as OracleBlob;
byte[] data = new byte[blob.Length];
await blob.ReadAsync(data, 0, Convert.ToInt32(blob.Length));
fileFullPath = Path.Combine(folder, fileName);
using (FileStream fs = new FileStream(fileFullPath, FileMode.OpenOrCreate, FileAccess.Write))
{
using (BinaryWriter bw = new BinaryWriter(fs))
{
bw.Write(data); //NO ASYNC METHOD HERE
logger.Debug("Finished writing file {0} to disk", fileFullPath);
}
}
Run Code Online (Sandbox Code Playgroud)
我可以改成下面这样吗?
OracleParameter returnParam = new OracleParameter("blob", OracleDbType.Blob);
command.Parameters.Add(returnParam);
await command.ExecuteNonQueryAsync();
OracleBlob blob = returnParam.Value as OracleBlob;
byte[] data = new byte[blob.Length];
await blob.ReadAsync(data, 0, Convert.ToInt32(blob.Length));
fileFullPath = Path.Combine(folder, fileName);
using (FileStream fs = new FileStream(fileFullPath, FileMode.OpenOrCreate, FileAccess.Write))
{
using (var writer = new StreamWriter(fs))
{
await writer.WriteAsync(new UnicodeEncoding().GetChars(data)); // HAD TO CONVERT THE BYTE ARRAY INTO A CHAR ARRAY
logger.Debug("Finished writing file {0} to disk", fileFullPath);
}
}
Run Code Online (Sandbox Code Playgroud)
BinaryWriter 在这里是不必要的。只是WriteAsync的byte[]到流
using (FileStream fs = new FileStream(fileFullPath, FileMode.OpenOrCreate, FileAccess.Write))
{
await fs.WriteAsync(data,0,data.Length);
logger.Debug("Finished writing file {0} to disk", fileFullPath);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
515 次 |
| 最近记录: |