110,526
社区成员
发帖
与我相关
我的任务
分享
ResType 处理接收到的消息(接收消息包 data)
{
var r1 = 开始计算(data);
var res = 开始抓取(result);
return res;
}
void 处理接收到的消息(接收消息包 data, Action<ResType> callback)
{
ThreadPool.QueueUserWorkItem(h => //调用 .net 线程池自动管理一个任务(匿名委托任务)
{
var result = 开始计算(data);
ThreadPool.QueueUserWorkItem(k => //调用 .net 线程池自动管理一个任务(匿名委托任务)
{
开始抓取(result, callback); //异步任务完成,回调通过参数传来的 Action
});
});
}
async Task<ResType> 处理接收到的消息(接收消息包 data)
{
var result = await 开始计算(data); //调用 .net task 自动管理一个异步任务
return await 开始抓取(result); //调用 .net task 自动管理另一个异步任务
}
一得到处理后的信息,立刻计算;一计算出结果,立刻抓取;一抓取完成,立刻抓取下一个
既然是状态跟踪,你需要也是建立状态描述 物体检查------------存在物体----判定是否已建立状态--------如果已经建立状态,更新运动状态,位置信息。如果未建立状态,新建状态并加入物体状态队列(物体状态-等待抓取) 机器人控制------------------订阅物体状态队列,没有队列异步等着,有队列取到一个,进行抓取控制(更新物体控制状态为正在抓取中),异步等待控制状态结果(成功还是失败) so设计结果是 公用上下文: 线程安全队列 --- 物体队列 当前控制物体 后台服务: 1. 判定物体服务-------------查找物体,判定物体存在,判定物体是否为同一物体,跟踪物体运动状态,更新物体位置信息 2.抓取服务------------从公用队列获取一个物体,设置为当前控制物体。启动异步抓取任务,等待抓取结果,重复整个过程
这也是Ros这种系统核心从来就没放在线程上,他的核心设计是Node节点,是消息,是dataflow数据流,是状态机原因