【发布时间】:2020-03-03 08:46:12
【问题描述】:
我正在尝试从 F# 订阅/取消订阅 C# 制作的(在 RabbitMQ 客户端库中):
public event AsyncEventHandler<BasicDeliverEventArgs> Received;
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<_,_>'.
我检查了the official MS documentation,但看不到任何关于 F# 标准事件类型的参考。
【问题讨论】:
标签: c# .net-core f# rabbitmq event-handling