我通过 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 个代理怎么办?这些引发的事件是否同步?假设我对此事件有一些长时间的计算功能。我可以确定其他代理的事件处理程序将等待其终止吗?