实现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
类并实现期望返回Task
的DoStuff
方法?
您可以使用Async.StartAsTask :
type Bar() = inherit Foo() override this.DoStuff() = async { return SomeEnum.Bar } |> Async.StartAsTask
Async.StartAsTask
将Async
作为输入,并返回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