异步创建文件

时间:2014-08-27 07:33:18

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

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

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

3 个答案:

答案 0 :(得分:18)

查看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);
    }
}

答案 1 :(得分:4)

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

即可

答案 2 :(得分:-2)

您可以像Task一样调用方法:

Task.Factory.StartNew(() => File.WriteAllText("test.txt","text"));

有很多方法可以启动任务,这只是其中之一,您需要阅读更多here