csharpfftfsharpintegrationinterpolationlinear-algebramathdifferentiationmatrixnumericsrandomregressionstatisticsmathnet
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
2.0 KiB
52 lines
2.0 KiB
// (c) Microsoft Corporation 2005-2009.
|
|
namespace Microsoft.FSharp.Control
|
|
|
|
open System
|
|
open System.Threading
|
|
open System.IO
|
|
open Microsoft.FSharp.Control
|
|
open Microsoft.FSharp.Collections
|
|
|
|
#if FX_NO_SYNC_CONTEXT
|
|
#else
|
|
type AsyncWorker<'T>(p,?asyncGroup) =
|
|
|
|
let syncContext = SynchronizationContext.Current
|
|
do match syncContext with
|
|
| null -> failwith "Failed to capture the synchronization context of the calling thread. The System.Threading.SynchronizationContext.Current of the calling thread is null"
|
|
| _ -> ()
|
|
|
|
let post (syncContext : SynchronizationContext) trigger args =
|
|
syncContext.Post(SendOrPostCallback(fun _ -> trigger args),state=null)
|
|
|
|
// Trigger one of the following events when the iteration completes.
|
|
let triggerCompleted,completed = Event.create<'T>()
|
|
let triggerError ,error = Event.create()
|
|
let triggerCanceled,canceled = Event.create()
|
|
let triggerProgress ,progress = Event.create<int>()
|
|
|
|
let asyncGroup = match asyncGroup with None -> new AsyncGroup() | Some ag -> ag
|
|
|
|
let doWork() =
|
|
asyncGroup.RunWithContinuations( (fun res -> post syncContext triggerCompleted res),
|
|
(fun exn -> post syncContext triggerError exn),
|
|
(fun exn -> post syncContext triggerCanceled exn ),
|
|
p)
|
|
|
|
|
|
member x.ReportProgress(progressPercentage) =
|
|
post syncContext triggerProgress progressPercentage
|
|
|
|
member x.RunAsync() =
|
|
ThreadPool.QueueUserWorkItem(fun args -> doWork())
|
|
|
|
member x.CancelAsync(?message) =
|
|
asyncGroup.TriggerCancel(?message=message);
|
|
|
|
member x.ProgressChanged = progress
|
|
member x.Completed = completed
|
|
member x.Canceled = canceled
|
|
member x.Error = error
|
|
|
|
|
|
#endif
|
|
|