एफ # में एक मेलबॉक्सप्रोसेसर है ... मैं उसी उद्देश्य के लिए सी # में सिंक्रनाइज़ेशन कॉन्टेक्स्ट का उपयोग करूंगा। मुझे कुछ मिनट दें और मैं एक उदाहरण लिखूंगा।
इसके अलावा: यहां मेरा कोड एफ # में है जो कुछ समान करता है ... यह काफी अधिक प्रयास होगा, लेकिन आरएक्स के साथ सी # में अभी भी करने योग्य होगा।
open System.Diagnostics
let numWorkers = 20
let asyncDelay = 100
type MessageForMailbox =
| DataMessage of AsyncReplyChannel<unit>
| GetSummary of AsyncReplyChannel<unit>
let main =
let actor =
MailboxProcessor.Start(fun inbox ->
let rec loop acc =
async {
let! message = inbox.Receive()
match message with
| DataMessage replyChannel -> replyChannel.Reply(); return! loop acc
| GetSummary replyChannel -> replyChannel.Reply(); return! loop acc
}
loop 0 // seed for acc
)
let codeBlocks = [for i in 1..numWorkers ->
async {
do! Async.Sleep asyncDelay
return! actor.PostAndAsyncReply DataMessage
} ]
while true do
printfn "Concurrent started..."
let sw = new Stopwatch()
sw.Start()
codeBlocks |> Async.Parallel |> Async.RunSynchronously |> ignore
actor.PostAndReply GetSummary
sw.Stop()
printfn "Concurrent in %d millisec" sw.ElapsedMilliseconds
printfn "efficiency: %d%%" (int64 (asyncDelay * 100)/sw.ElapsedMilliseconds)
printfn "Synchronous started..."
let sw = new Stopwatch()
sw.Start()
for codeBlock in codeBlocks do codeBlock |> Async.RunSynchronously |> ignore
sw.Stop()
printfn "Synchronous in %d millisec" sw.ElapsedMilliseconds
printfn "efficiency: %d%%" (int64 (asyncDelay * numWorkers * 100)/sw.ElapsedMilliseconds)
main
क्या 1000 प्रकार के सभी प्रकार समान हैं? आप समेकित देखने योग्य प्रकार का क्या प्रकार करते हैं? –
सभी 1000 अवलोकन एक ही प्रकार के हैं, नया कुल एक नया प्रकार हो सकता है। जैसे घटना कुल मिलाकर बन जाती है। – lukebuehler
क्या आप केवल अपने नवीनतम मूल्यों को जोड़ना चाहते हैं? अर्थात। यदि अवलोकन योग्य दो घटनाओं को आग लगती है और अवलोकन योग्य बी केवल एक ही आग लगती है, तो क्या आप बी की घटना के साथ, या अंतिम घटना से पहली घटना को एकत्र करना चाहते हैं? –