MailboxProcessor.Scan<'Msg,'T> Method (F#)
Scans for a message by looking through messages in arrival order until a provided function returns a Some value. Other messages remain in the queue.
Namespace/Module Path: Microsoft.FSharp.Control
Assembly: FSharp.Core (in FSharp.Core.dll)
// Signature: member this.Scan : ('Msg -> Async<'T> option) * ?int -> Async<'T> // Usage: mailboxProcessor.Scan (scanner) mailboxProcessor.Scan (scanner, timeout = timeout)
This method is for use within the body of the agent. For each agent, at most one concurrent reader may be active, so no more than one concurrent call to Receive, TryReceive, Scan or TryScan may be active. The body of the scanner function is locked during its execution, but the lock is released before the execution of the asynchronous workflow.
The following example shows how to use the Scan method. In this code, mailbox processor agents manage a series of simulated jobs that run and compute a result.
A sample session follows.
Number Of Logical Processors: 2 Requesting job #1 Job #1 submitted. Job #1 started on procId 0. Requesting job #2 Job #2 submitted. Job #2 started on procId 1. Requesting job #3 Requesting job #4 Requesting job #5 Requesting job #6 Requesting job #7 Requesting job #8 Requesting job #9 Requesting job #10 Job #1 completed. Nth Prime for N = 5000 is 48611. Job #3 submitted. Job #3 started on procId 0. Done submitting jobs. Press Enter to exit when ready. Job #2 completed. Nth Prime for N = 10000 is 104729. Job #4 submitted. Job #4 started on procId 1. Job #3 completed. Nth Prime for N = 15000 is 163841. Job #5 submitted. Job #5 started on procId 0. Job #4 completed. Nth Prime for N = 20000 is 224737. Job #6 submitted. Job #6 started on procId 1. Job #5 completed. Nth Prime for N = 25000 is 287117.