Обратите очень пристальное внимание на протесты, данные Jon Skeet - "Учитывая, что реализация...". Другими словами, внесите малейшее изменение (несколько потоков, другие обработчики, и т.д.), и Вы рискуете терять инвариантность порядка выполнения.
Делают НЕ , полагаются на событие, заказывая . Все отправки события должны быть логически независимыми, как будто они происходили параллельно. События являются логически независимыми действиями.
я буду идти один шаг вперед и утверждать, что, если необходимо принять порядок на увольнение событий, Вы имеете серьезный недостаток дизайна и/или неправильно используете события.
IIRC, ключевое слово do
может работать здесь:
type Wrapper(args) =
let tool = new MutableTool()
do tool.Init(args)
let lookupTable = //create lookup using tool here
member this.Lookup(s) = //callers use lookupTable here
Я не уверен, что вы имели в виду в последней строке кода, поэтому я оставил это, как вы написали это ...
Вам нужно "делать":
type Foo(args) =
let x = new Whatever()
do x.Bar()
member ....