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 人いる場合はどうなりますか? これらの発生したイベントは同期されていますか? このイベントの長い計算関数があるとします。他のエージェントのイベント ハンドラーがその終了を待っていることを確認できますか?