MailboxProcessor从C#

MailboxProcessor从C#,第1张

概述你试过用C#的邮箱处理器T吗?你可以发布示例代码吗? 你如何开始一个新的,发送消息到它,如何处理它们? 虽然可以使用MailboxProcessor< T>直接从C#(使用C#异步扩展),如我的另一个答案中所指出的,这不是一件好事 – 我主要是为了好奇而写的. 邮箱处理器< T>类型被设计为从F#使用,所以它不适合C#编程模型.你可能可以为C#实现类似的API,但它不会那么好(当然不是C#4.0) 你试过用C#的邮箱处理器T吗?你可以发布示例代码吗?

你如何开始一个新的,发送消息到它,如何处理它们?

解决方法 虽然可以使用MailBoxProcessor< T>直接从C#(使用C#异步扩展),如我的另一个答案中所指出的,这不是一件好事 – 我主要是为了好奇而写的.

邮箱处理器< T>类型被设计为从F#使用,所以它不适合C#编程模型.你可能可以为C#实现类似的API,但它不会那么好(当然不是C#4.0). TPL DataFlow library (CTP)为C#的未来版本提供了类似的设计.

目前,最好的做法是使用MailBoxProcessor< T>实现代理.在F#中,通过使用Task对C#使用做出友好的评价.这样,您可以在F#(使用尾递归和异步工作流程)中实现代理的核心部分,然后组合&使用它们从C#.

我知道这可能不会直接回答你的问题,但我认为这是值得一个例子 – 因为这真的是将F#代理(MailBoxProcessor)与C#相结合的唯一合理的方法.
我最近写了一个简单的“聊天室”演示,所以这里是一个例子:

type internal ChatMessage =   | GetContent of AsyncReplyChannel<string>  | SendMessage of stringtype ChatRoom() =   let agent = Agent.Start(fun agent ->     let rec loop messages = async {      // Pick next message from the mailBox      let! msg = agent.Receive()      match msg with       | SendMessage msg ->           // Add message to the List & continue          let msg = XElement(Xname.Get("li"),msg)          return! loop (msg :: messages)      | GetContent reply ->           // Generate HTML with messages          let HTML = XElement(Xname.Get("ul"),messages)          // Send it back as the reply          reply.Reply(HTML.ToString())          return! loop messages }    loop [] )  member x.SendMessage(msg) = agent.Post(SendMessage msg)  member x.AsyncGetContent() = agent.PostAndAsyncReply(GetContent)   member x.GetContent() = agent.PostAndReply(GetContent)

到目前为止,这只是一个标准的F#代理.现在,有趣的是以下两种将GetContent作为可从C#使用的异步方法的方法.该方法返回Task对象,它可以以通常的方式从C#中使用:

member x.GetContentAsync() =     Async.StartAsTask(agent.PostAndAsyncReply(GetContent))  member x.GetContentAsync(cancellationToken) =     Async.StartAsTask     ( agent.PostAndAsyncReply(GetContent),cancellationToken = cancellationToken )

这可以从C#4.0(使用诸如Task.WaitAll等等的标准方法)合理使用,并且当您可以使用C#await关键字来处理任务时,下一个版本的C#将会更好.

总结

以上是内存溢出为你收集整理的MailboxProcessor从C#全部内容,希望文章能够帮你解决MailboxProcessor从C#所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1236189.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存