Csharp/C#教程:实现C#方法返回F#中的Task分享


实现C#方法返回F#中的Task

我在F#中创建了一个inheritance自C#类的类型,该类公开了一个在C#中返回Task的方法。 我正在尝试找出在F#中做到这一点的最佳方式

说我的C#看起来像这样:

 public class Foo { public TextWriter Out { get { return Console.Out; } } public virtual Task DoStuff() { return Task.FromResult(SomeEnum.Foo); } } public enum SomeEnum { Foo, Bar } 

我在F#中inheritance该类型的第一步看起来像这样:

 type Bar() = inherits Foo() override this.DoStuff() = this.Out.WriteLineAsync("hey from F#") |> ignore System.Threading.Task.FromResult(SomeEnum.Bar) 

但是a)它不觉得它实际上是异步的并且b)它只是感觉不是-F#。

那么我将如何inheritanceFoo类并实现期望返回TaskDoStuff方法?

您可以使用Async.StartAsTask :

 type Bar() = inherit Foo() override this.DoStuff() = async { return SomeEnum.Bar } |> Async.StartAsTask 

Async.StartAsTaskAsync作为输入,并返回Task

执行异步的F#方式是使用异步工作流 。 不幸的是, 他们不支持等待非通用Task 。 但是使用上述问题中的一个解决方法,您的代码可能如下所示:

 override this.DoStuff() = async { do! this.Out.WriteLineAsync("hey from F#") |> Async.AwaitVoidTask return SomeEnum.Bar } |> Async.StartAsTask 

我相信FSharp包装任务的方式是使用

上述就是C#学习教程:实现C#方法返回F#中的Task分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 var a = Async.AwaitIAsyncResult(somecsharpreturningtask) |> ignore 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/982920.html

(0)
上一篇 2021年12月18日
下一篇 2021年12月18日

精彩推荐