po2600 2022-01-29 14:57 采纳率: 0%
浏览 142
已结题

Task.Run 数据量大线程安全、阻塞的问题

业务场景

当前异步方式是API接口,会有大量数据和并发,在接收到请求使用Task.Run进行异步处理,并且要即时返回结果,如果在Task.Run前面加Await会等到方法执行完才能返回。如果不加Await就会造成线程阻塞

问题相关代码
 public async Task<IReturnModel> TaskRunAsync(CoilingOutParam outParam)
        {
                _ = Task.Run(async () =>
                 {
                     //需要异步执行,不等待结果,后台执行,会造成线程阻塞
                     var rst = await ExecuteCoilingMoveTrackOut(outParam);
                     
                 });
                //直接返回需要的结果
                return await Task.FromResult(ReturnModel.Successful());
        }

以上会直接返回,执行时间0秒,是需要的效果,但是在后台执行ExecuteCoilingMoveTrackOut方式,会造成线程阻塞,如:第一次执行完ExecuteCoilingMoveTrackOut是1秒,第二次ExecuteCoilingMoveTrackOut就需要2秒,以此类推

我想要达到的结果

如何能达到即时返回结果,ExecuteCoilingMoveTrackOut方法在后台去执行,并且不会线程阻塞?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 2月6日
    • 创建了问题 1月29日

    悬赏问题

    • ¥20 易康econgnition精度验证
    • ¥15 线程问题判断多次进入
    • ¥15 msix packaging tool打包问题
    • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
    • ¥15 python的qt5界面
    • ¥15 无线电能传输系统MATLAB仿真问题
    • ¥50 如何用脚本实现输入法的热键设置
    • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
    • ¥30 深度学习,前后端连接
    • ¥15 孟德尔随机化结果不一致