【问题标题】:Creating a file asynchronously异步创建文件
【发布时间】:2014-08-27 07:33:18
【问题描述】:

如何修改此方法以异步调用它?

private void Write(string fileName, data)
{
    File.WriteAllText(fileName, data);           
}

【问题讨论】:

标签: c# .net asynchronous file-io async-await


【解决方案1】:

查看FileStream.WriteAsync(请注意,您必须使用适当的重载,它采用bool 指示它是否应该异步运行:)

public async Task WriteAsync(string data)
{
    var buffer = Encoding.UTF8.GetBytes(data);

    using (var fs = new FileStream(@"File", FileMode.OpenOrCreate, 
        FileAccess.Write, FileShare.None, buffer.Length, true))
    {
         await fs.WriteAsync(buffer, 0, buffer.Length);
    }
}

编辑

如果您想使用 string data 并避免转换为 byte[],您可以使用更抽象、更简洁的 StreamWriter.WriteAsync 重载,它接受字符串:

public async Task WriteAsync(string data)
{
    using (var sw = new StreamWriter(@"FileLocation"))
    {
         await sw.WriteAsync(data);
    }
}

【讨论】:

  • @Prabhu 是的,他必须await WriteAsync
  • 这里的数据(是字符串)写在哪里?
  • @Prabhu 我编辑了我的答案以使其清楚。 buffer 变量需要是byte[],所以我们需要转换字符串
  • 太棒了,谢谢...你知道 Append 是否也有一个吗?
  • @Prabhu StreamWriter constructor 有一个重载,它接受 bool,表示您是否要附加到现有文件。
【解决方案2】:

使用 .NetCore 2.0,您只需使用 File.WriteAllTextAsync

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    • 2023-04-06
    • 2017-01-25
    • 2020-12-02
    • 2013-12-29
    • 2015-07-04
    • 1970-01-01
    相关资源
    最近更新 更多