.Net调用接口处理时间过长,前端访问超时解决方案

直接上代码

        public TaskInfo AutoUpClassTest(AutoUpClassInput input)
        {
            if (!string.IsNullOrEmpty(input.TaskId))
            {
                //查询状态
                var ts = _cache.Get("_AutoUpClass_" + input.TaskId);
                if (ts != null)
                    return (TaskInfo)ts;
                else
                    return new TaskInfo { Status = 2, TaskId = input.TaskId, Msg = "失败" };
            }
            else
            {
                //首次
                string g = Guid.NewGuid().ToString();
                Task.Run(() =>
                {
                    try
                    {
                        //漫长的操作
                        for (int i = 0; i < 30; i++)
                        {
                            Thread.Sleep(1000);
                            _cache.Set("_AutoUpClass_" + g, new TaskInfo { Status =0, Msg = "执行中", TaskId = g ,Progress=$"{i}/{30}" });
                        }
                       
                        //设置完成
                        _cache.Set("_AutoUpClass_" + g, new TaskInfo { Status = 1, Msg = "成功",TaskId = g });
                    }
                    catch (Exception)
                    {
                        //设置失败
                        _cache.Set("_AutoUpClass_" + g, new TaskInfo { Status = 2, Msg = "失败" ,TaskId = g });
                    }
                });

                var cacheEntryOptions = new MemoryCacheEntryOptions()
                    .SetSlidingExpiration(TimeSpan.FromMinutes(10));
                //设置查询
                var taskInfo = new TaskInfo { Status = 0, Msg = "执行中", TaskId = g };
                _cache.Set("_AutoUpClass_" + g, taskInfo, cacheEntryOptions);
                return taskInfo;
            }
        }

 执行效果

作者:银龙

-------------------------------------------

个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!

如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!

原文地址:https://www.cnblogs.com/wangyinlon/p/15160497.html