我如何在f#中编写这个异步IO c#代码

本文关键字:异步 IO 代码 | 更新日期: 2023-09-27 18:02:11

我有这样的代码:

public async Task CreateFileAsync(string filePath, byte[] bytes)
    {
        using (var sourceStream = System.IO.File.Open(filePath, FileMode.OpenOrCreate))
        {
            sourceStream.Seek(0, SeekOrigin.End);
            await sourceStream.WriteAsync(bytes, 0, bytes.Length).ConfigureAwait(false);
        }
    }

我想把它写在f#上,在我不知道该怎么做之前,我已经做到了这一点:

module myModule
open System.IO;
let CreateFileAsync (filePath: string, bytes : byte[]) =
    use sourceStream = File.Open(filePath, FileMode.OpenOrCreate)
        |> sourceStream.Seek(0, SeekOrigin.End);        

我已经搜索过了,但是这里有几个概念,我不能把它们放在一起。

我如何在f#中编写这个异步IO c#代码

您可以使用async { .. }工作流:

let createFileAsync (filePath, bytes) = async {
  use sourceStream = System.IO.File.Open(filePath, FileMode.OpenOrCreate)
  sourceStream.Seek(0, SeekOrigin.End)
  do! sourceStream.AsyncWrite(bytes, 0, bytes.Length) }

这是相当命令式的代码,所以在f#中看起来没有太大的不同。