日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

mailbox 编程_MailboxProcessor从C#

發布時間:2025/3/12 C# 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mailbox 编程_MailboxProcessor从C# 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

雖然可以使用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

| SendMessage of string

type 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#將會更好.

總結

以上是生活随笔為你收集整理的mailbox 编程_MailboxProcessor从C#的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。