Я пытаюсь подписаться / отписаться на C# -рабочий (в клиентской библиотеке RabbitMQ) от F #:
AsyncEventingBasicConsumer.cs
public event AsyncEventHandler<BasicDeliverEventArgs> Received;
AsyncEventHandler.cs
public delegate Task AsyncEventHandler<in TEvent>(object sender, TEvent @event) where TEvent : EventArgs;
Мне удалось подписаться на событие, выполнив:
let subscribeAsync (channel: IModel) exchange callback =
let consumer = AsyncEventingBasicConsumer(channel)
consumer.add_Received(AsyncEventHandler<BasicDeliverEventArgs>(fun sender args -> Task.CompletedTask))
// ...
При этом мне интересно, почему приведенный ниже код не может скомпилироваться:
let subscribeAsync (channel: IModel) exchange callback =
let consumer = AsyncEventingBasicConsumer(channel)
consumer.Received.AddHandler(AsyncEventHandler<BasicDeliverEventArgs>(fun sender args -> Task.CompletedTask))
// ...
Потому что я получаю ошибку ниже:
Program.fs(10, 14): [FS1091] The event 'Received' has a non-standard type. If this event is declared in another CLI language, you may need to access this event using the explicit add_Received and remove_Received methods for the event. If this event is declared in F#, make the type of the event an instantiation of either 'IDelegateEvent<_>' or 'IEvent<_,_>'.
Я проверил официальную документацию MS но я не вижу ссылки на тип стандартного события для F #.