在.net中发现mqtt订阅topic事件或者redis 订阅channel事件 ,发现每次回调函数的线程id都是可能不一样的.如何确定在哪个线程中执行.
问题和这个类似,有点不明白这句:So your OnData event handler is getting called on whatever thread the ExternalSource is running on.
https://stackoverflow.com/questions/2459634/in-net-what-thread-will-events-be-handled-in
Thread.Current
我知道委托函数可能是不同,不明白的是为什么会是不同的,委托函数的由那个线程执行是看什么
@narojay: 如event OnClick 事件
void MouseUp()
{
if(....)Click();
}
protected virtual Click()
{
Task.Run(()=>{OnClick?.Invoke});
}
这样做的好处是,你的代码 执行一段时间,界面线程不会不转动;给别个留接口肯定是有这些考虑的,当然winForm并没有Task.Run()
@花飘水流兮: 可能我表达的不清楚,我实际上问的是这个Click这个方法触发的时候,所在线程是由什么决定的
@narojay: 代码看不懂?你把Click想成通讯的事件不就完了。上图的 结构 是winForm的结构。
Task也可以换成Thread,但你觉得假设放个成员变量的Thread合适不?还是Task合适?
向下你想知道线程分配的方法,见操作系统,概括起来无非操作系统 创建返回线程实例,而线程带参数就是一个函数委托。
中间可能被进一步封装,如Task。