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

 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

 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

 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

调用异步服务时的超时处理相关推荐

  1. 关于Hystrix整合ribbon调用其他服务时 首次进入回退

    Hystrix简介 是由netflix开源的一个延迟或容错库,用于隔离访问远程系统.服务.或第三方库,防止级联失败,从而提升系统的容错性和可用性,实现方式如下: 包裹请求 使用HystrixComma ...

  2. 实现在GET请求下调用WCF服务时传递对象(复合类型)参数

    WCF实现RESETFUL架构很容易,说白了,就是使WCF能够响应HTTP请求并返回所需的资源,如果有人不知道如何实现WCF支持HTTP请求的,可参见我之前的文章<实现jquery.ajax及原 ...

  3. Java中调用FTP服务时inputStream获取一直为null

    问题描述:Java调用FTP服务时,已成功登录到了FTP服务中,文件路径中无中文字符,当根据文件路径获取 输入流inputStream时,inputStream一直为null BufferedRead ...

  4. HSF 入门-发布和调用hsf服务

    原文:http://songpo-ath-taobao-com.iteye.com/blog/1405665 如何将Spring bean对外发布,以供远程调用已有一个名称为HelloWorld的Sp ...

  5. 通过数据库存储过程调用Web服务的办法

    Web服务概览 Web服务,从广义而言,就是在两个应用或电子设备之间通过万维网通信的方法.Web服务有两种类型:简单对象访问协议(SOAP)以及表述性状态转移(REST). SOAP为基于XML的消息 ...

  6. Spring Cloud Alibaba 服务消费者调用 nacos 服务报错:java.net.UnknownHostException: xxx

    目录 1. 服务消费者启动类 1.1. 服务消费者 controller 2. 服务提供者启动类 2.1. 服务提供者 controller 3. 服务报错 4. nacos 信息 5. 解决思路 5 ...

  7. 调用方法[manageapp]时发生异常_探讨通过Feign配合Hystrix进行调用时异常的处理

    原文作者作者:任聪 前言:此文所述处理方式为本人在实践过程中研究分析得出的一种解决方案. 本文不仅希望能为 SC 学习者提供一种如题问题的一种解决方案,并且希望通过本文引出各位 SC 的朋友对如题问题 ...

  8. ajax调用第三方web服务,js调用soapWebService服务

    js调用soapWebService服务 什么是 SOAP? SOAP 指简易对象访问协议 SOAP 是一种通信协议 SOAP 用于应用程序之间的通信 SOAP 是一种用于发送消息的格式 SOAP 被 ...

  9. 引用dubbo服务时的ref和id分别是什么

    引用dubbo并且采用注解扫描的方式时 service层中引用dubbo服务时,ref的值是想暴露的接口的实现类(注意是实现类,所以是ItemServiceImpl)的名字,并且首字母小写(小写了就是 ...

最新文章

  1. 使用7zip压解各种文件的经常使用命令
  2. 【HDU6667】Roundgod and Milk Tea【贪心】
  3. Redis中的zset 存储结构(实现)原理
  4. 计算机辅助项目管理课程方案,天津大学计算机辅助管理研究生课程简介
  5. html5的q标签,HTML 5 q 标签 - HTML 参考手册
  6. 我的模型有多快?——深度学习网络模型的运算复杂度、空间占用和内存访问情况计算...
  7. mongodb远程连接访问
  8. 把word excel ppt 导入到右键快捷菜单中
  9. 【色彩管理】CMYK色彩模式详解
  10. 三菱服务器位置控制,关于三菱PLC 相对位置绝对位置控制问题
  11. 百度手写文字识别教程
  12. 机器学习的应用方面,主要有哪些?
  13. 利用MATLAB绘制阶梯图(stairs函数)并获取所绘制的阶梯图的横纵坐标值
  14. 全球与中国电力系统同步时钟市场深度研究分析报告
  15. mac 无法删除用户
  16. ProxyDHCP service did not reply to request on port 4011
  17. git 找回删除的文件
  18. 动手学深度学习笔记3.1+3.2+3.3
  19. 我们都是被上帝咬过的苹果
  20. c语言程序设计迷宫问题,C语言迷宫问题

热门文章

  1. WEB通用网关接口:CGI简单教程
  2. 男子借款70万前后还了1600万仍未还清,如何避免套路贷?
  3. 贷款中介市场要变天了吗?
  4. WordPress+Markdown+为知笔记,实现高质量笔记和博客
  5. c语言grade d10,《电子技术10级C语言课程设计报告书写规范》.doc
  6. influxdb数据过期_Influxdb Cluster下的数据写入
  7. python搭建分布式集群_Spark完全分布式集群搭建【Spark2.4.4+Hadoop3.2.1】
  8. 写一个方法判断一个字符串是否对称_判断一个男生是否好色的方法
  9. Python 每日定时查询数据库生成Excel报表,并群发邮件
  10. signature=f2388c4f1bce538cc797410d9560f03b,KSHV strategies for host dsDNA sensing machinery