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

主线程调用异步服务后,通过设定主线程的等待时间来进行超时处理。
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值