【发布时间】:2018-09-26 09:04:08
【问题描述】:
我想为一个定义如下的事件创建一个 Observable:
public event Func<Exception, Task> Closed;
我目前的代码是这样的:
Observable.FromEvent<Func<Exception, Task>, Unit>(h => hub.Closed += h, h=> hub.Closed -= h);
编译正常,但是抛出了这个运行时异常:
System.ArgumentException: '无法绑定到目标方法,因为 其签名或安全透明度与 委托类型。'
我觉得我做错了。我不习惯从不遵循 EventArgs 模式的事件创建 observables ????
编辑:仅出于说明目的,这是具有经典事件处理外观的完整代码:
class Program
{
static async Task Main(string[] args)
{
var hub = new HubConnectionBuilder().WithUrl("http://localhost:49791/hubs/status")
.Build();
hub.On<Status>("SendAction", status => Console.WriteLine($"Altitude: {status.Altitude:F} m"));
await hub.StartAsync();
hub.Closed += HubOnClosed;
while (true)
{
}
}
private static Task HubOnClosed(Exception arg)
{
Console.WriteLine("The connection to the hub has been closed");
return Task.CompletedTask;
}
}
【问题讨论】:
-
您能否展示一个将您的事件与传统事件处理代码一起使用的示例?这样可以更轻松地将其转换为可观察对象。
-
感谢@Enigmativity。我正在使用来自第 3 方库(SignalR Core)的 Closed 事件。事件定义在这里:github.com/aspnet/SignalR/blob/… 我正在尝试的代码在这个 repo 中:github.com/SuperJMN/SignalRCoreSample。随意克隆它。这真的很简单。运行服务器和客户端(同时),你会得到异常。
-
@Enigmativity 我刚刚添加了带有经典事件处理的代码。我希望这已经足够了。这让我很头疼 :) 非常感谢!
标签: c# .net events observable system.reactive