我正在学习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:前一个写操作当前正在使用流编写器。
我做错了什么?
答案 0 :(得分:2)
所有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
}