异步写二进制?

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)

Dav*_*oft 5

BinaryWriter 在这里是不必要的。只是WriteAsyncbyte[]到流

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)