刚看了下最新的改动,是把
MessageSenderStruct messageSenderStruct = new(actorId, requestType, needException); self.requestCallback.Add(rpcId, messageSenderStruct);
两行代码挪到了 调用 SendInner 的后面,
我感觉还是有点低概率问题:
在SendInner里面如果 发送和目标fiber是同一个 就会直接调用 HandleMessage
HandleMessage里面如果一切都正常就同步走到通过mailBoxComponent去触发对应mailboxtype的Invoke
随便举个例子 可能不恰当:
调用到 MailBoxType_UnOrderedMessageHandler 的 Handle -》 HandleAsync
是个异步函数 await MessageDispatcher 的handle -》继承的Handle 是 MessageHandler

这里await run,如果run里面其实等于是个同步返回的,随便举个例子:

这样 MessageHandler的Handle就会马上执行接下来的 Reply,
Reply -》 SendInner -》 HandleMessage -》 HandleIActorResponse -》 此时因为对应的MessageSenderStruct还没有注入到requestCallback ,就没法反馈RPC了
也就是说 在 “同Fiber传导情况下 + 最终MessageHandler的Run等于是同步执行的情况下”,会出现回馈找不到MessageSenderStruct的情况。简单看的不知道我这个表述是否准确或者是否是有这个情况。
不过当然真要用到这种情况上,出这个问题,也是用法不对了。