我正在学习 F#,但在使用 WriteLineAsync 时遇到问题。
使用同步代码,它可以完美地工作:
using (new StreamWriter(new FileStream(@"c:\work\f2.txt", FileMode.Create, FileAccess.Write, FileShare.None, bufferSize= 4096, useAsync= true)))
(fun sw -> File.ReadLines @"c:\Work\f1.txt" |> Seq.iter(fun x-> sw.WriteLine(x) ))
当我尝试使用 WriteLineAsync 时:
using (new StreamWriter(new FileStream(@"c:\work\f2.txt", FileMode.Create, FileAccess.Write, FileShare.None, bufferSize= 4096, useAsync= true)))
(fun sw -> File.ReadLines @"c:\Work\f1.txt" |> Seq.iter(fun x-> sw.WriteLineAsync(x) |> Async.AwaitTask |> ignore ))
我收到错误 InvalidOperationException:流写入器当前正在被先前的写入操作使用。
我做错了什么?
最佳答案
全部AwaitTask
所做的是它从 Task<T>
转换而来至Async<T>
,它实际上并不等待任何东西。这意味着您不能只是ignore
结果。
您可以做的是创建一个 async
工作流程并等待 WriteLineAsync()
通过使用do!
:
async {
use sw = new StreamWriter(new FileStream(@"c:\work\f2.txt", FileMode.Create, FileAccess.Write, FileShare.None, bufferSize= 4096, useAsync= true))
for line in File.ReadLines @"c:\Work\f1.txt" do
do! sw.WriteLineAsync(line) |> Async.AwaitTask
}
关于f# - 在 F# 中使用 WriteLineAsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36116231/