• C#控制方法执行时间


    1.最近在项目中有个读取文件的方法,如果文件过大,这个方法会长时间卡住,影响程序的执行。于是研究了一下控制方法的执行时间,如果超过某个时间,则跳出该方法的执行。

    #demo

     1 private static void Main(string[] args)
     2 {
     3     var startTime = DateTime.Now;
     4     Console.WriteLine("开始时间:" + startTime);
     5     var ret = Process(null, 10000);//如果运行时间超过10秒,退出执行
     6     Console.WriteLine("Result={0},函数执行时间={1}s", ret, (DateTime.Now - startTime).TotalSeconds);
     7     startTime = DateTime.Now;
     8     ret = Process(null, 4000);//如果运行时间超过4秒,退出执行
     9     Console.WriteLine("Result={0},函数执行时间={1}s", ret, (DateTime.Now - startTime).TotalSeconds);
    10     Console.WriteLine("End:" + DateTime.Now);
    11     Console.WriteLine("Press any key to exit...");
    12     Console.ReadKey();
    13 }
    14 
    15 /// <summary>
    16 /// 控制执行时间方法
    17 /// </summary>
    18 /// <param name="param"></param>
    19 /// <param name="timeout">程序执行时间</param>
    20 /// <returns></returns>
    21 private static bool Process(string param, int timeout)
    22 {
    23     var ret = false;
    24     new System.Threading.Tasks.TaskFactory().StartNew(() =>
    25     {
    26         ret = LongTimeFunc();
    27     }).Wait(timeout);
    28 
    29     return ret;
    30 }
    31 
    32 /// <summary>
    33 /// 测试程序,固定执行五秒
    34 /// </summary>
    35 /// <returns></returns>
    36 private static bool LongTimeFunc()
    37 {
    38     System.Threading.Thread.Sleep(5000);
    39     return true;
    40 }

    #demo

    上面的LongTimeFunc方法是我们需要控制时长的方法,Process的timeout参数是需要设定的时长。

    看一下测试结果:

  • 相关阅读:
    [LeetCode]Binary Tree Level Order Traversal
    [LeetCode]Binary Tree Postorder Traversal
    Netty(六):NioServerSocketChannel源码解析
    Netty(五):ServerBootstrap启动流程
    Netty(四):AbstractChannel源码解析
    Netty(三):IdleStateHandler源码解析
    自定义fastjson对枚举类型的序列化及反序列化过程
    TCP连接过程及报文解析
    Netty(二):数据在ChannelPipeline中的流经
    Netty(一):ByteBuf读写过程图解
  • 原文地址:https://www.cnblogs.com/yellow3gold/p/16198655.html
Copyright © 2020-2023  润新知