我通过SynchronizationContext创建了一个与GUI交互的代理:
type AsyncWorker(id:int) =
let someEvent = new Event<int * string>()
let errorEvent = new Event<_>()
let syncContext = SynchronizationContext.Current
let f (inbox: MailboxProcessor<_>) =
let rec loop () = async {
let! message = inbox.Receive ()
...
syncContext.RaiseEvent someEvent (id, str)
}
那有危险吗?如果我有20个代理人怎么办?这些引发的事件是否同步?假设我有一些长时间计算此事件的功能。我可以确定其他代理的事件处理程序是否会等待它的终止?