给一个方法设置Timeout功能

兔子家族-二哥 2018-05-10 05:10:26
Model.WellCareModel.WellCareLoginRequest wellCare = new Model.WellCareModel.WellCareLoginRequest() { userName = bundle.userName, wxUuid = bundle.WxOpenId, orgCodeFlag = "test" };
//Timer t = new Timer(p => careResponse(bundle, list,index), null, 0, 2500);
// Thread t1 = new Thread(this.careResponse());
Interface.IWellCareService ser = ServiceObjectContainer.Get<Interface.IWellCareService>();
well = ser.UserLogin(wellCare);
HeathBindModel model = new HeathBindModel()
{
WxOpenId = bundle.WxOpenId,
TelPhone = bundle.TelPhone,
Sex = list[index].Sex,
Age = list[index].Age,
HospitalId = bundle.HospitalId
};
response.ErrorCode = 0;
response.Message = "查询用户成功";
response.Tag = new { model = model, WKHEuserinfo = well };

这个方法怕他执行很长时间,现在想他如果3秒不返回就让他为空
...全文
611 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
iml6yu 2018-05-11
  • 打赏
  • 举报
回复
因为你这个是顺序执行的(单线程) 如果想要在UserLogin中,不建议你在此处开线程或者task,(当然开线程之后在join也可以)。 需要确认 如果Interface.IWellCareService 是wcf或者webserver可以通过配置timeout来实现,如果不是,可以考虑对这个实现类的userLogin方法进行重写,在方法内部实现超时返回
  • 打赏
  • 举报
回复
引用 11 楼 hanjun0612 的回复:
[quote=引用 6 楼 God_Girl 的回复:] 版主 Delay 我没这属性啊
那你有Task吗?
Task[] tasks = new Task[3];
            tasks[0] = Task.Run(()=>Thread.Sleep(4000));
            tasks[1] = Task.Run(() => Thread.Sleep(3000));
            tasks[2] = Task.Run(() => Thread.Sleep(1000));

            int index = Task.WaitAny(tasks);
            Console.WriteLine("线程下标:" + index);
            Console.WriteLine("线程id:" + tasks[index].Id);

            Console.ReadLine();
[/quote] 有Task tasks[0] = Task.Factory.StartNew(delegate { ser.UserLogin(wellCare); });
正怒月神 2018-05-10
  • 打赏
  • 举报
回复
引用 6 楼 God_Girl 的回复:
版主 Delay 我没这属性啊
那你有Task吗?
Task[] tasks = new Task[3];
            tasks[0] = Task.Run(()=>Thread.Sleep(4000));
            tasks[1] = Task.Run(() => Thread.Sleep(3000));
            tasks[2] = Task.Run(() => Thread.Sleep(1000));

            int index = Task.WaitAny(tasks);
            Console.WriteLine("线程下标:" + index);
            Console.WriteLine("线程id:" + tasks[index].Id);

            Console.ReadLine();
  • 打赏
  • 举报
回复
引用 7 楼 starfd 的回复:
frame4.5版本才有……
我用的VS2017 居然没得?
  • 打赏
  • 举报
回复
frame4.5版本才有……
  • 打赏
  • 举报
回复
引用 11 楼 hanjun0612 的回复:
[quote=引用 6 楼 God_Girl 的回复:] 版主 Delay 我没这属性啊
那你有Task吗?
Task[] tasks = new Task[3];
            tasks[0] = Task.Run(()=>Thread.Sleep(4000));
            tasks[1] = Task.Run(() => Thread.Sleep(3000));
            tasks[2] = Task.Run(() => Thread.Sleep(1000));

            int index = Task.WaitAny(tasks);
            Console.WriteLine("线程下标:" + index);
            Console.WriteLine("线程id:" + tasks[index].Id);

            Console.ReadLine();
[/quote] tasks[0] = Task.Factory.StartNew(delegate { ser.UserLogin(wellCare); }); tasks[1] = Task.Factory.StartNew(new System.Action(()=> { Thread.Sleep(3000); }) );
  • 打赏
  • 举报
回复
引用 5 楼 hanjun0612 的回复:
#1 的方法是可行的。
Task[] tasks = new Task[3];
            tasks[0] = Task.Delay(4000);
            tasks[1] = Task.Delay(3000);
            tasks[2] = Task.Delay(1000);

            int index = Task.WaitAny(tasks);
            Console.WriteLine("线程下标:"+index);
            Console.WriteLine("线程id:"+tasks[index].Id);
版主 Delay 我没这属性啊
  • 打赏
  • 举报
回复
2017肯定有的,你没添加Task引用吧?
正怒月神 2018-05-10
  • 打赏
  • 举报
回复
#1 的方法是可行的。
Task[] tasks = new Task[3];
            tasks[0] = Task.Delay(4000);
            tasks[1] = Task.Delay(3000);
            tasks[2] = Task.Delay(1000);

            int index = Task.WaitAny(tasks);
            Console.WriteLine("线程下标:"+index);
            Console.WriteLine("线程id:"+tasks[index].Id);
  • 打赏
  • 举报
回复
引用 7 楼 starfd 的回复:
frame4.5版本才有……
sleep 可以么?
  • 打赏
  • 举报
回复
引用 3 楼 starfd 的回复:
我就是这个意思啊…… Task.Any是只要有任意一个方法返回了就返回结果,然后就可以根据index判断是t1执行结束了,还是delay结束了,如果是delay结束那你就返回空啊
大概明白你的意思 不过老哥,你这属性我是一个都没看到啊。。。
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
Task.Any(t1,Task.Delay(3000))
根据index判断是哪个先返回
我这是想等待一个方法 红色那个三秒钟,不反回就当他是返回空继续执行 求教
  • 打赏
  • 举报
回复
我就是这个意思啊…… Task.Any是只要有任意一个方法返回了就返回结果,然后就可以根据index判断是t1执行结束了,还是delay结束了,如果是delay结束那你就返回空啊
  • 打赏
  • 举报
回复
Task.Any(t1,Task.Delay(3000))
根据index判断是哪个先返回

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧