在 F# 中,agent ReplyChannels/AsyncReplyChannels 是否跨线程?
In F#, do agent ReplyChannels/AsyncReplyChannels cross threads?
例如,如果我在 UI 线程上启动代理 (1),然后在后台线程上启动另一个代理 (2) 并从 (1) 到 (2) 发送消息,其中包括a ReplyChannel/AsyncReplyChannel 然后将 (2) 的回复发送回 (1),是否足以确保后台线程代理与 UI 线程代理之间的跨线程通信?
与特定线程上的代理通信的其他方法似乎更喜欢在特定线程的 SynchronizationContext 上使用事件的引发,而对使用 ReplyChannels 只字未提...
当您谈论代理时,您指的是邮箱处理器吗?
在那种情况下 sending/posting 消息和使用 replychanel 足以在两个 agents/threads.
之间进行通信
请注意,UI线程和你直接提到的后台线程之间不会发生通信。每个 agent/mailboxprocessor 都有自己的线程。
如果您使用 UI 线程中的 "PostAndReply",您不需要 SynchronizationContext,因为调用在内部阻塞。
如果您使用 "PostAndAsyncReply",将返回异步 F# 工作流。在那种情况下,您仍然需要使用 SynchronizationContext。
在这种情况下,请参考 https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/async.switchtocontext-method-%5Bfsharp%5D
例如,如果我在 UI 线程上启动代理 (1),然后在后台线程上启动另一个代理 (2) 并从 (1) 到 (2) 发送消息,其中包括a ReplyChannel/AsyncReplyChannel 然后将 (2) 的回复发送回 (1),是否足以确保后台线程代理与 UI 线程代理之间的跨线程通信? 与特定线程上的代理通信的其他方法似乎更喜欢在特定线程的 SynchronizationContext 上使用事件的引发,而对使用 ReplyChannels 只字未提...
当您谈论代理时,您指的是邮箱处理器吗? 在那种情况下 sending/posting 消息和使用 replychanel 足以在两个 agents/threads.
之间进行通信请注意,UI线程和你直接提到的后台线程之间不会发生通信。每个 agent/mailboxprocessor 都有自己的线程。
如果您使用 UI 线程中的 "PostAndReply",您不需要 SynchronizationContext,因为调用在内部阻塞。
如果您使用 "PostAndAsyncReply",将返回异步 F# 工作流。在那种情况下,您仍然需要使用 SynchronizationContext。 在这种情况下,请参考 https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/async.switchtocontext-method-%5Bfsharp%5D