gpt4 book ai didi

c# - F# 中的异步工作流

转载 作者:太空狗 更新时间:2023-10-30 01:28:29 25 4
gpt4 key购买 nike

我是一名 C# 程序员,但我对 F# 中的异步工作流有疑问。假设我在 C# 类库中有以下类:

class File {
IAsyncResult BeginReadAll(string fileName, AsyncCallback callback, object state){}
string EndReadAll(IAsyncResult result){}
}

我的理解是,我可以在 F# 中创建一个名为 ReadAllAsync 的函数,我可以这样调用它:

async {  let! rsp = ReadAllAsync() }

并且它不会阻塞调用线程,而是将其释放到线程池,然后在操作完成时返回另一个线程。我想我了解如何使用 Async.Primitive 在 F# 中对此进行编码,但我的问题是:我可以从 C# 代码调用此 ReadAllAsync 函数吗?如果是这样,我如何将 F# 代码打包到类库中以便从 C# 访问?

最佳答案

这里有一篇文章可以准确显示您的要求:

http://codebetter.com/blogs/matthew.podwysocki/archive/2008/10/15/functional-c-implementing-async-computations-in-c.aspx

但是,您最终会使用 C# 的 monad 语法。由于 LINQ 是为查询而设计的,所以它看起来有点奇怪。此外,不支持 try/catch 或 using for dispose。

如果没有正确的 monad 语法,您从 Async.BuildPrimitive 获得的“ReadAllAsync”将不会有同样的魔力。调用它很简单,但真正的实用程序是能够组合它。

不幸的是,您最好只使用 C# 样式

关于c# - F# 中的异步工作流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/494798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com