如何修改此方法以异步方式调用它?
private void Write(string fileName, data)
{
File.WriteAllText(fileName, data);
}
答案 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。