问题标签 [hopac]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
207 浏览

asynchronous - Hopac——只有在有人收听的情况下,我才能赋予频道价值吗?

Hopac允许将give值同步到一个通道,如果没有人在听,它将阻塞,如果没有send 读取,则异步将缓冲这些值。

我想做一些介于两者之间的事情:如果有侦听器,则给出一个值,或者如果没有侦听器,则继续进行而不阻塞或缓冲该值。有没有办法做到这一点?

0 投票
0 回答
377 浏览

multithreading - Hopac,如何实现更细微的 MailboxProcessor?

我不确定我是否应该在这里或Hopac Wiki上问这个问题,或者这更像是一个设计问题,但这里有。我最近正在研究 F# 代理以使用与我的 Rx 相关的编码并遇到以下代码如何使用 MailboxProcessor 创建作业队列?并想,嘿,这不是最适合Hopac的东西吗?

现在我有几个关于如何实际实现可以在 Hopac 中启动和暂停的“作业队列”的问题(如在作业队列 post中)。

  • 问题:如何维护Hopac.Jobs队列,并能够在需要时暂停处理作业,或者也可以清除它?我可以像在作业队列帖子中那样实现一个显式队列),但除此之外,这个问题的一个可能答案也让我很感兴趣。
  • 然后是一个更一般性建议的问题:我计划制作数千个这样的代理,以便它们从 Rx 流中获取输入,或者每个代理可能有一个流,进行一些处理,然后将结果转发到异步接口(大多数可能它返回一个Taskor Task<T>) 可能需要时间来完成或失败(例如,接口后面有一个数据库)在这种情况下,我可能想要超时并重试。也许这可以通过 Rx 将Job结果排队以输出 Rx 流来更好地完成,但要点是Task基于接口交互、超时和失败时重试。问题:这会是一个好的场景吗?我的目标是在混合 .NET 代码代码库(即 C#、一些 VB.NET 和 F#)中更实际的用例,因此将不胜感激意见和实现点。

我从Post Mailbox 基准示例中得到启发并创建了以下示例(代码的真正要点是 JobProcessor)

0 投票
0 回答
665 浏览

multithreading - 更好地理解 F# Hopac 库

我已经开始使用 Hopac 作为 Async/TPL 的替代品,我喜欢它。我了解基本用法,但有些方面仍然不清楚。

首先,我们能否Alt与 F#进行比较lazy,以便Alt仅在 Alt.pick 上评估 an 中的作业?

其次,这种 AutoResetEvent 的实现对于 Hopac 来说是否正确且惯用?

第三,对于 Hopac,ManualResetEvent 的这种实现是否正确且惯用?

交叉发布:https ://github.com/VesaKarvonen/Hopac/issues/26

0 投票
1 回答
80 浏览

f# - Hopac timeOutMillis 无法按预期工作

我最近开始玩 Hopac 并认为这太棒了。然而,这是一个我无法解决的问题。下面是代码片段:

我认为在经过 3000 毫秒后,超时替代将变为可用并将中止打印消息。这不会发生,只有在 channel 中没有任何内容时才会触发 timeout c

我将超时放在 Alt.choose 列表中的第一位,因为根据文档,如果同时有多个备选方案可用,则会选择列表中第一个出现的备选方案(关于备选方案的语义

非常感谢任何帮助

0 投票
1 回答
92 浏览

f# - 如何拆箱异步[]

所以我有一个Async<string> [],对于我的生活,我无法弄清楚如何拆箱!

我从

Job<Result<string>> []

然后我设法得到它

Job<string> []

所以我补充说,Job.toAsync将其转换为异步可能更容易摆脱。不

我现在有

Async<string> []

我正在使用Hopac

所以我的问题是,我怎么才能得到一个string []

0 投票
1 回答
73 浏览

f# - >>= 运算符不带函数吗?

我正在做一个附带项目,我是第一次使用 Hopac。我遇到了一个奇怪的(对我来说)编译问题,我无法理解。我怀疑我是这里的问题,而不是 Hopac。

该程序应该是一个简单的控制台应用程序,它使用来自各种服务的通知。这是有问题的模块:

在这种情况下,编译器会抱怨:Expecting a type supporting the operator '>>=' but given a function type. You may be missing an argument to a function.

同样,如果我使用稍微不同的语法:

在这种情况下,错误是:This function takes too many arguments, or is used in a context where a function is not expected.

我问 haf 关于他的松弛,他的建议是检查>>=. 该工具并没有真正帮助我解决这个问题,但我打开的唯一定义的命名空间/模块>>=HopacBitThicket那些只是简单的命名空间,其中包含一些类型定义)。

我在这里做错了什么?

0 投票
1 回答
146 浏览

f# - 关于使用 Hopac 创建 Alt

当我使用 Hopac 像往常一样或曾经创建Alt<unit>时,Alt.<functions>它会导致我产生奇怪的否定确认结果。

但是,如果我async {<expression>}用来创建,Alt<unit>那么一切都会按预期进行。

结果是:

但是我想得到相同的结果。使用时有什么问题Alt.<function>

0 投票
0 回答
45 浏览

f# - 在 Hopac 中连接作业

你怎么会成为一个Alt<'a>out of a Job<'a>?或者说其他人如何成为Alt<'a>众多中的一个,例如从一个Alt<'a>[]?有Job.conCollect,它会返回Job<'a>,但没有类似Alt.conCollect的东西会返回Alt<'a>

0 投票
1 回答
35 浏览

concurrency - 为什么需要两个双向通道来实现单元的服务器协议?

实现该协议需要两个双向通道似乎很奇怪。难道我们不能只使用一个通道并更改服务器循环以提供和接收该单个通道。请注意,这在 Hopac 中是允许的并且没有问题。作业不能在单个同步操作中使用通道向自己发送消息。解释如果只有一个通道而不是单独的 getCh 和 putCh 通道会出现什么问题。提示:考虑有多个客户的情况。

以上来自Hopac 文档。

新用户是否真的希望在旅程的这一点上了解图书馆实施的细节?当文档给出答案而不是提出问题时,我更喜欢它。为什么同时使用单个通道take并且get是一个坏主意的原因是什么?

有一些差异,但没有什么我不会归因于并发的变幻莫测。

0 投票
1 回答
292 浏览

f# - F#- 使用 HttpFs.Client 和 Hopac:如何获取响应代码、响应标头和响应 cookie?

我将 F# 与 HttpFs.Client 和 Hopac 一起使用。

我可以使用以下代码获取 JSON/XML 响应的每个节点的响应正文和值:

但是如何获取响应代码、响应标头和响应 cookie?我需要在上面显示的相同方法中获取它,以便我也可以对这些项目进行断言。

我确实尝试过 response.StatusCode, response.Cookies.["cookie1"] 但是当我在响应后添加句点时没有出现这样的方法。