调用异步服务时的超时处理

主线程调用异步服务后,通过设定主线程的等待时间来进行超时处理。
Demo如下:

 

AsyncTask.cs 

 

ExpandedBlockStart.gif
 1 using System;
 2 using System.Threading.Tasks;
 3 using MyCSharp.ExternalService;
 4 
 5 namespace MyCSharp.Grammas
 6 {
 7     public class AsyncTask
 8     {
 9         private readonly int _timeout;
10 
11         private AsyncTask()
12         {
13         }
14 
15         /// <summary>
16         /// 构造函数
17         /// </summary>
18         /// <param name="timeout">超时时间</param>
19         public AsyncTask(Int32 timeout = 30000)
20         {
21             _timeout = timeout;
22         }
23 
24         /// <summary>
25         /// 执行任务
26         /// </summary>
27         /// <returns></returns>
28         public bool Execute()
29         {
30             var task = Task.Factory.StartNew(this.CallExternalSevice);
31             return task.Wait(_timeout);
32 
33         }
34 
35         /// <summary>
36         /// 调用外部服务
37         /// </summary>
38         private void CallExternalSevice()
39         {
40             new DemoService().Response();
41         }
42 
43 
44     }
45 }
View Code

 AsyncTaskTest.cs

 

ExpandedBlockStart.gif
 1 using Microsoft.VisualStudio.TestTools.UnitTesting;
 2 using MyCSharp.Grammas;
 3 
 4 namespace MyCSharp.FunctionTests
 5 {
 6     [TestClass]
 7     public class AsyncTaskTest
 8     {
 9         [TestMethod]
10         public void ExecuteTest_LessThanResponseTime_TimeOut()
11         {
12             var result = new AsyncTask(50).Execute();
13             Assert.IsFalse(result);
14         }
15 
16         [TestMethod]
17         public void ExecuteTest_EqualsResponseTime_Success()
18         {
19             var result = new AsyncTask(100).Execute();
20             Assert.IsFalse(result);
21         }
22 
23         [TestMethod]
24         public void ExecuteTest_MoreThanResponseTime_Success()
25         {
26             var result = new AsyncTask(120).Execute();
27             Assert.IsTrue(result);
28         }
29     }
30 }
View Code

 DemoService.cs

ExpandedBlockStart.gif
 1 using System.Threading;
 2 
 3 namespace MyCSharp.ExternalService
 4 {
 5     public class DemoService
 6     {
 7         /// <summary>
 8         /// 服务响应
 9         /// </summary>
10         public void Response()
11         {
12             Thread.Sleep(100);
13         }
14     }
15 }
View Code

 

转载于:https://www.cnblogs.com/markhe/p/5587987.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256989.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux下一个apache+tomcat负载均衡和集群

先说一下我的环境 一个ubuntu虚拟机&#xff0c; 一个apache2.2示例 两tomcat1.7示例 1.安装apacheserver sudo apt-get install apache2假设要重新启动的话&#xff0c;执行命令&#xff1a; sudo /etc/init.d/apache2 restart ubuntu下的apache会默认创建路径/var/www&#x…

JS实现css属性动画效果

html代码 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>css属性运动框架</title><style>body,div{margin: 0;padding: 0;}ul,li{list-style: none;}ul li{width: 200px;height: 100px;background: yellowgre…

学习笔记(24):Python网络编程并发编程-进程与线程的区别

立即学习:https://edu.csdn.net/course/play/24458/296438?utm_sourceblogtoedu 线程与进程的区别&#xff1a; 1.消耗区别&#xff1a;进程>线程 1&#xff09;进程运行结果 #进程运行 from multiprocessing import Process def task(name):print("我是%s"%na…

Codeforces Beta Round #1

A /*************************************************************************> File Name: A.cpp> Author: opas_chenxin> Mail: 1017370773qq.com > Created Time: 2016年05月06日 星期五 02时22分23秒 ************************************************…

windows系统中创建线程常用哪几个函数,有什么区别?

windows系统中创建线程常用哪几个函数&#xff1f; 在windows系统中创建线程的函数有&#xff1a; CreadThread&#xff0c;AfxBeginThread&#xff0c;_beginthread&#xff0c;_beginthreadex。 他们的区别在于使用的场景不同。 CreateThread是Windows的API函数(SDK函数的标…

java.lang.String小测试

还记得java.lang.String么&#xff0c;如果现在给你一个小程序&#xff0c;你能说出它的结果么 1 public static String ab(String a){2 return a "b";3 }4 5 public static void testAb(){6 String x "a";7 ab…

Oracle传输表空间

一、简介 可传输表空间(还有个集)最大的优势是其速度比export/import或unload/load要快的多。因为可传输表空间主要是复制数据文件到目标路径&#xff0c;然后再使用export/import或Data Pump export/import等应用仅导出/导入表空间对象的元数据到新数据库。 &#xff08;1&…

进程控制块PCB结构体 task_struct 描述

进程控制块&#xff0c;英文名&#xff08;Processing Control Block&#xff09;&#xff0c;简称 PCB 。 进程控制块是系统为了管理进程设置的一个专门的数据结构&#xff0c;主要表示进程状态。 每一个进程都对应一个PCB来维护进程相关的信息&#xff1b; 在Linux中&#xf…

基于OpenCV与tensorflow实现实时手势识别

基于OpenCV与tensorflow object detection API使用迁移学习&#xff0c;基于SSD模型训练实现手势识别完整流程&#xff0c;涉及到数据集收集与标注、VOC2012数据集制作&#xff0c;tfrecord数据生成、SSD迁移学习与模型导出&#xff0c;OpenCV摄像头实时视频流读取与检测处理&a…

学习笔记(25):Python网络编程并发编程-Thread其他属性和守护线程

立即学习:https://edu.csdn.net/course/play/24458/296440?utm_sourceblogtoedu 1.Thread其他的属性 CurrentThread().getName():获得当前线程的名字 t.is_Alive:判断线程是否还在运行 t.join():等待线程运行结束再执行join后面的代码 t.setName("name"):为线程…

AIX主机信任关系配置

1.配置主机信任关系的时候&#xff0c;需要先在两台主机/etc/hosts文件中添加要信任主机的&#xff29;&#xff30;&#xff0c;假设有(192.168.8.190 aix190,192.168.8.191 aix191)2个主机,在191主机配置如下所示 192.168.8.190 aix190 2.如果系统配置DNS&#xff0c;则需要去…

Sprint2团队贡献分

团队贡献分&#xff1a; 郭志豪&#xff1a;31% http://www.cnblogs.com/gzh13692021053/ 杨子健&#xff1a;22%http://www.cnblogs.com/yzj666/ 谭宇森&#xff1a;23%http://www.cnblogs.com/yzj666/ 刘森松&#xff1a;24% http://www.cnblogs.com/lssh/转载于:https://w…

学习笔记(26):Python网络编程并发编程-GIL与自定义互斥锁的区别

立即学习:https://edu.csdn.net/course/play/24458/296443?utm_sourceblogtoedu 1.GIL的基本概念 答&#xff1a;GIL本质上就是一把锁&#xff0c;只是他是一把在python解释器上的锁 2.GIL与互斥锁的区别 答&#xff1a; 1&#xff09;GIL保护的是在python解释器上的参数&a…

多目标跟踪检测

方法&#xff1a; 1、实时性&#xff0c;每帧视频10ms 2、方法&#xff0c;首先深度学习检测到目标&#xff0c;然后再写跟踪算法

2014年最具人气国外WORDPRESS主题

在国外&#xff0c;WrodPress这个博客系统极为受欢迎&#xff0c;使用WordPress来建站可以降低很多成本&#xff0c;另外还能以十分便宜的价格获得一个漂亮的WP网站模板。 今天向大家分享来自Themeforest 2014年最具人气的高级WrodPress主题&#xff0c;这些主题无论是设计还是…

软件工程学习感想

通过这半学期我对软件工程的学习&#xff0c;从软件工程的基础到考试用户的需求分析与求解&#xff0c;最后到黑盒白盒测试通过自身做过的一些案例&#xff0c;讲解了软件工程这门本身枯燥乏味的课程&#xff0c;这不仅增强了学生学习的积极性&#xff0c;也通过让我们自己去做…

开源视觉salm算法介绍

当前的开源SLAM方案 开源方案传感器形式地址链接MonoSLAM单目https://github.com/hanmekim/SceneLib2 PTAM单目 http://www.robots.ox.ac.uk/~gk/PTAM/ORB-SLAM 单目为主http://webdiis.unizar.es/~raulmur/orbslam/ORB-SLAM2单目https://github.com/raulmur/ORB_SLAM2LSD-SLAM…

学习笔记(27):Python网络编程并发编程-GIL与多线程

立即学习:https://edu.csdn.net/course/play/24458/296444?utm_sourceblogtoedu GIL与多线程 1.须知&#xff1a; 1&#xff09;cpu主要是为了提升计算性能&#xff0c;增加CPU提升计算性能&#xff1b; 2&#xff09;每一个CPU一旦遇到阻塞状态都会处于等待状态&#xff0c…

J0ker的CISSP之路:复习-Access Control(3)

本文同时发表在&#xff1a;[url]http://netsecurity.51cto.com/art/200801/63649.htm[/url] 在《J0ker的CISSP之路》系列的上一篇文章里&#xff0c;J0ker给大家介绍了访问控制CBK里面一些常见的破坏信息资产保密性的威胁类型&#xff0c;那么什么类型的威胁会破坏信息资产的完…

C#中对泛型List进行分组输出元素

背景&#xff1a;在输出列表时&#xff0c;往往需要按照某一字段进行分组&#xff0c;比如在输出城市列表时&#xff0c;按照首字母进行分组&#xff0c;输出学生列表时&#xff0c;按照年级进行分组&#xff0c;然后再对分组的结果按照其他的字段进行排序。 如存在以下STU学生…