Jdragon 2015-07-30 10:05 采纳率: 0%
浏览 2212

.net 多线程 调用接口

 情况是这样的,我做了一个定时器,每天某个时间调用接口,发送所有数据。
由于一次数据可能多条 所以做两个分页查询(先说明下 为了让没有数据的时候 不从复调用接口,所以每天只执行一次)

在下面必须添加Thread.Sleep();否则无法按for循环执行。




 public void StartOnHour_GuoQi(object sender, System.Timers.ElapsedEventArgs e)
        {
            //整点发送
            if (e.SignalTime.Hour == hour_start && e.SignalTime.Minute == minute_start && e.SignalTime.Second == 0)
            {
                //执行请求处理
                try
                {
                    var param = new { pageindex = 0, pagesize = 10 };
                    var result_page = InvokeAgentService("OverdueDataCount", param);
                    dynamic page_Json = JKZL.Common.Core.Converts.Json2Dynamic.DynamicConvertHelper.ConvertJson(result_page);

                    //总记录数
                    int total = CommFunction.IntParse(page_Json.Data.TotalCount);
                    //总页数
                    int allpage = 0;

                    /*分页*/
                    if ((total % pageSize) == 0)
                    {
                        allpage = total / pageSize;
                    }
                    else
                    {
                        allpage = (total / pageSize) + 1;
                    }

                    for (int pageIndex = 0; pageIndex < allpage; pageIndex++)
                    {

                        var thread_GuoQi = new Thread(() =>
                        {
                            var parameters = new { pageindex = pageIndex, pagesize = pageSize };
                            var result = InvokeAgentService("GetOverdueData", parameters);

                            dynamic resutlJson = JKZL.Common.Core.Converts.Json2Dynamic.DynamicConvertHelper.ConvertJson(result);


                            if (resutlJson != null && resutlJson.Code == "10000")
                            {
                                foreach (var item in resutlJson.Data.Items)
                                {
                                    //执行代码

                            }
                            else
                            {
                                LogHelp.SysLog("请求返回结果错误结果--接口数据:" + result, "error");
                            }
                        });

                        thread_GuoQi.Start();
                        Thread.Sleep(50);
                    }
                }
                catch (Exception ex)
                {
                    LogHelp.SysLog("执行过期通知处理程序错误" + ex.Message, "error");
                }
            }

        }
  • 写回答

1条回答 默认 最新

  • threenewbee 2015-07-30 10:23
    关注

    关键是
    JKZL.Common.Core.Converts.Json2Dynamic.DynamicConvertHelper.ConvertJson(result);
    这个调用是否线程安全,如果不是,就需要同步。

    评论

报告相同问题?

悬赏问题

  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况
  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用