丶万一 2022-08-07 22:05 采纳率: 100%
浏览 29
已结题

WebAPI Net6.0 接收请求后的异步响应。

在收到请求后,需要先进行tcp通讯连接到另一个服务上获取数据,然后再将数据响应给前端;

那么在这个请求过程中,我如何在tcp拿到数据后,在响应给对应的请求?因为我是在请求处理函数中发送的tcp包,而接收返回的tcp包是在Recv回调函数中,此时我已经拿不到请求对象了。

img

  • 写回答

1条回答

  • wanghui0380 2022-08-08 08:44
    关注

    这种设计必须确定异步的时间
    1.如果说tcp过来在2秒内,你的客户也不纠结这两秒。你可以直接用await/asynct

    比如 webapi写成

     task<object> GetXXX()
    {   TaskCompleteSource<object> tcs=new TaskCompleteSource<object>();
              taskComple
       //回调C#是委托,当然我们可以多播,或者另外封装成Chanel《T》或其他的基于消息发布和订阅的处理
    //这里就我当是委托,当然这里还需要控制超时的,这个我就不写了,你看明白这种处理手段,自己应该能写出如何控制超时的代码
          tcp.回调+=(回调消息)=>{
               if(回调消息==你要的消息) tcs.TrySerValue(消息)
    }
                tcp.sendmsg();//
            
               
           retrun tcs.task
    }
    
    

    2.如果你tcp返回大于2秒,或者你的客户非常纠结这2秒。请考虑用其他方式返回数据,比如WebSocket 或者其他支持js的消息中间件

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月5日
  • 已采纳回答 2月26日
  • 请提交代码 8月7日
  • 创建了问题 8月7日

悬赏问题

  • ¥100 c语言,请帮蒟蒻看一个题
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)