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


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

  • 相关阅读:
    二叉树的存储方式以及递归和非递归的三种遍历方式
    java基础04 匿名内部类
    jvm007 jvm知识点总览
    jvm学习006 jvm内存结构分配
    java基础03 位运算符
    java基础02 数据类型转
    jvm005 从jvm的角度谈谈线程的实现
    Arcgis投影变换后图像变深的问题
    win 7 64位如何安装erdas 9.2
    Win7 64bit 成功安装ArcView3.X
  • 原文地址:https://www.cnblogs.com/markhe/p/5587987.html
Copyright © 2020-2023  润新知