Tag: orleans

将异步 – 等待C#代码转换为与调度程序相关的F#

我想知道这是否是一个太广泛的问题,但最近我让自己遇到了一段代码,我想确定如何从C#转换为适当的F#。 旅程从这里开始(1) (TPL-F#交互的原始问题),并继续这里(2) (我正在考虑转换为F#的一些示例代码)。 示例代码在这里重现的时间太长,但有趣的函数是ActivateAsync , RefreshHubs和AddHub 。 特别有趣的是 AddHub具有private async Task AddHub(string address)的签名。 RefreshHubs在一个循环中调用AddHub并收集一个tasks列表,然后通过await Task.WhenAll(tasks)它最终await Task.WhenAll(tasks) ,因此返回值与其private async Task RefreshHubs(object _)签名相匹配。 RefreshHubs由ActivateAsync调用,就像await RefreshHubs(null) ,最后有一个调用await base.ActivateAsync()匹配函数签名public override async Task ActivateAsync() 。 题: 将这些函数签名正确转换为F#仍然保持接口和function并尊重默认的自定义调度程序是什么? 我也不太确定这个“在F#中异步/等待”。 至于如何“机械地”做到这一点。 🙂 原因是在链接“here(1)”中似乎存在问题(我没有validation过),因为F#异步操作不遵循(Orleans)运行时设置的自定义协作调度程序。 此外, 这里指出TPL操作逃脱调度程序并转到任务池,因此禁止使用它们。 我能想到解决这个问题的一种方法是使用F#函数,如下所示 //Sorry for the inconvenience of shorterned code, for context see the link “here (1)”… override […]