coder001 最近的时间轴更新
coder001

coder001

🏢  非NEET家里蹲
V2EX 第 113141 号会员,加入于 2015-04-24 12:44:11 +08:00
今日活跃度排名 7144
资深(?)Windows用户
coder001 最近回复了
(看来似乎回帖没有代码格式支持,而且 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
103 天前
回复了 mialu0802 创建的主题 分享发现 大家会用到 AI 去噪点软件吗?
waifu2x-caffe 的降噪功能还够用吧
ISP 网络问题我一般都是直接把片区安装师傅抓来的,别说断网只要延迟稍微有点高,我就会拿他是问
当然得先排查证明是 ISP 的问题,比如更换路由器依旧复现网络问题之类的
124 天前
回复了 dawnsw 创建的主题 Windows help! 如何在安装软件的时候安装驱动
试试 InfDefaultInstall.exe 参考 inf 右键安装的注册表关联操作

HKEY_CLASSES_ROOT\inffile\shell\Install\command
%SystemRoot%\System32\InfDefaultInstall.exe "%1"
最后一个视频拖动残留看起来像是屏幕下半有个响应慢的 update layered window ,就是那种不规则半透明窗口
po 可以检查一下有没有加速球之类的东西(
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2788 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 78ms · UTC 14:02 · PVG 22:02 · LAX 06:02 · JFK 09:02
Developed with CodeLauncher
♥ Do have faith in what you're doing.