V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  coder001  ›  全部回复第 1 页 / 共 7 页
回复总数  124
1  2  3  4  5  6  7  
(看来似乎回帖没有代码格式支持,而且 gist 连接展开的特性似乎也没了,凑合看吧🌚)
进程内队列? 为啥不用 Channel

https://learn.microsoft.com/zh-cn/dotnet/api/system.threading.channels.channel?view=net-8.0


另外,如果是事件总线,可以考虑引入泛型之类的花样类型匹配订阅筛选器

这是自用的事件总线实现,目前大规模用在工作生产环境和玩具项目,未发现明显性能瓶颈


IEventBus.cs

```
public interface IEventBus
{
bool Subscript<T>(Action<T> callBack);

bool UnSubscript<T>(Action<T> callBack);

bool Publish<T>();

bool Publish<T>(T obj);
}
```

AnyPublishEvent.cs

```
/// <summary>
/// 任何事件发布,用于统计或通配
/// </summary>
[DisplayName("*")]
public record AnyPublishEvent(Type Type, object? Obj);
```

InProcessEventBusBase.cs

```
public abstract class InProcessEventBusBase(ILogger<InProcessEventBusBase> logger) : IEventBus
{
private readonly Dictionary<Type, HashSet<Delegate>> _dicTypeToHandlers = [];

public bool Subscript<T>(Action<T> callBack)
{
var type = typeof(T);
lock (_dicTypeToHandlers)
{
if (!_dicTypeToHandlers.TryGetValue(type, out var handlers))
{
handlers = _dicTypeToHandlers[type] = [];
}

return handlers.Add(callBack); // 忽略重复
}
}

public bool UnSubscript<T>(Action<T> callBack)
{
lock (_dicTypeToHandlers)
{
if (_dicTypeToHandlers.TryGetValue(typeof(T), out var handlers))
{
var unSubscript = handlers.Remove(callBack);

if (handlers.Count == 0) _dicTypeToHandlers.Remove(typeof(T));

return unSubscript;
}

return false;
}
}

public bool Publish<T>()
{
PublishInternal(new AnyPublishEvent(typeof(T), default));
return PublishInternal<T?>(default);
}

public bool Publish<T>(T obj)
{
PublishInternal(new AnyPublishEvent(typeof(T), obj));
return PublishInternal(obj);
}

private bool PublishInternal<T>(T eventValue)
{
var type = typeof(T);

Delegate[] subscripts;
lock (_dicTypeToHandlers)
{
if (!_dicTypeToHandlers.TryGetValue(type, out var handlers)) return false;
subscripts = [.. handlers];
}

foreach (var del in subscripts)
{
try
{
((Action<T>)del)(eventValue);
}
catch (Exception e)
{
logger.LogError(e, nameof(Publish));
}
}

return true;
}
}
```
补充:用好分页样式,控制内容不被分页打断
我用 HTML 写,导出 PDF
82 天前
回复了 mialu0802 创建的主题 分享发现 大家会用到 AI 去噪点软件吗?
waifu2x-caffe 的降噪功能还够用吧
ISP 网络问题我一般都是直接把片区安装师傅抓来的,别说断网只要延迟稍微有点高,我就会拿他是问
当然得先排查证明是 ISP 的问题,比如更换路由器依旧复现网络问题之类的
可以试试 C9 云开发环境, 有 nodejs 环境就能运行, 内置了 web 界面,有 shell 和文件管理还有代码编辑器

https://github.com/c9/core

虽然有些老,但功能还是挺全的
103 天前
回复了 dawnsw 创建的主题 Windows help! 如何在安装软件的时候安装驱动
试试 InfDefaultInstall.exe 参考 inf 右键安装的注册表关联操作

HKEY_CLASSES_ROOT\inffile\shell\Install\command
%SystemRoot%\System32\InfDefaultInstall.exe "%1"
最后一个视频拖动残留看起来像是屏幕下半有个响应慢的 update layered window ,就是那种不规则半透明窗口
po 可以检查一下有没有加速球之类的东西(
有个网站叫做 x 分钟学 y ,当你有一个编程语言基础的时候,看这个或许上手比较高效(搞笑?🤡)
https://learnxinyminutes.com/docs/zh-cn/go-cn/

然而 op 看起来已经过了上手阶段,处于迷茫的探索期…
116 天前
回复了 unt 创建的主题 程序员 有没有 modbus485 字段解析器
116 天前
回复了 unt 创建的主题 程序员 有没有 modbus485 字段解析器
老老实实自己 parse 吧,不同的协议花样多的很,尽管 modbus 规定每个寄存器两个字节
但遭不住取高低字节单独用,或者跨寄存器存文本的情况,还有各种 flag/bits 用法
我不管,全都 parse 成定义好的模型,然后再业务层使用
117 天前
回复了 cokyhe 创建的主题 NGINX 求救:屏蔽爬虫试了 2 天,没成功
@lpe234 看来可能又是黑产的新玩法,比如诱导搜索引擎爬虫去干坏事之类的
微软拼音输入法也挺好用啊?
VisualStudio 内置代码关系图功能 (dog)
您要找的是不是:离线互联网 kiwix
123 天前
回复了 a74074011 创建的主题 宽带症候群 貌似遇到了电信宽带被定时启用丢包
设置让主路由每天深夜里自己重启,这样就能回避许多长时间运行带来的异常状态
124 天前
回复了 montaro2017 创建的主题 Windows Windows Outlook 邮箱自动启动
没人提到 thunderbird ?
OP 可以试试 Autoruns 找找有哪些启动项或者外壳插件,把可疑的全都先停用,排除法找到混蛋

https://learn.microsoft.com/en-us/sysinternals/downloads/autoruns

sysinternals 是个被微软收购的小团队,出了一包强力工具
1  2  3  4  5  6  7  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2599 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 34ms · UTC 06:34 · PVG 14:34 · LAX 22:34 · JFK 01:34
Developed with CodeLauncher
♥ Do have faith in what you're doing.