用于Signalr的.NET核心客户端具有HubConnection可按以下方式使用的类。
HubConnection connection = new HubConnectionBuilder()
.WithUrl("https://localhost:44321/hub")
.Build();
await connection.StartAsync();
connection.On<SomeEvent>("HubMethodName", (ev) => Console.WriteLine("EventHandler"))
Run Code Online (Sandbox Code Playgroud)
我想在事件处理程序中进行一些异步工作,但是对我来说,如何立即执行并不太明显,因为大多数重载都期望an Action。使用async void作品,但我不确定这是一个好主意。另外,签名有一个过载,On(string methodName, Type[] parameters, Func<object[], Task>) handler)这是有希望的,但是我想我会期望带有的过载On<T>(string methodName, Func<T, Task> handler)。我可以自己创建带有该签名的扩展方法,但是当它不存在时,我想我可能已经错过了一些重要的事情吗?
我正在制作一个Color类,并提供一个标准的构造函数
Color(int red, int green, int blue)
Run Code Online (Sandbox Code Playgroud)
然后我想提供一种简单的方法来获得最常见的颜色,如Color.Blue,Color.Red.我看到两种可能的选择:
public static readonly Color Red = new Color(255, 0, 0);
public static Color Red { get { return new Color(255, 0, 0); } }
Run Code Online (Sandbox Code Playgroud)
我不完全理解的是,如果有一个优势,而不是静态关键字的工作原理.我的想法是:第一个创建一个实例,然后该实例在程序的整个持续时间内保留在内存中,并且每次调用Red时,都会使用此实例.后者仅在首次使用时创建一些内容,但每次都会创建一个新实例.如果这是正确的,那么我认为如果我提供了很多预定义的颜色,那么第一个会使用大量不必要的内存吗?因此,每次我猜测它是内存使用量与实例化对象的运行时开销.
我的推理是否正确?在设计类和使用static关键字时,对最佳实践的任何建议都会很棒.