zoukankan      html  css  js  c++  java
  • C# Task超时规则

    需要知道以下的知识

    正规的骚操作:https://stackoverflow.com/questions/4238345/asynchronously-wait-for-taskt-to-complete-with-timeout

    参考资料:https://walterlv.com/post/task-wait-async-with-timeout.html#%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99

    开始我们的讲解吧

    假如我们需要这样的游戏规则,在规定的时间内没有完成有关功能,就自动提示超时。

    为了保证这个功能足够简单又能够说明清楚,我们加入朴素的素数判定

    private static bool IsPrime(long num)
    {
        bool isPrime = false;
        if (num == 1)
        {
            return true;
        }
        for (var i = 2; i < num; i++)
        {
            if (num % i != 0) continue;
            isPrime = true;
            break;
        }
        return isPrime;
    }
    
    private static int ForPrime(int num)
    {
        int numPrime = 0;
        for (var i = 1; i <= num; i++)
        {
            numPrime += IsPrime(i)? 0 : 1;
        }
        return numPrime;
    }
    
    public static async Task<int> PrimeTask()
    {
        int val = await Task.Run(() => ForPrime(100000));
    
        return val;
    }

    虽然不知道处理100000个数字耗时多少,但肯定1s是跑不完的,so。。。如果我们需要在它超过1s之后提示呢,随便提示啥都行。

    public static async Task<bool> TimeTask()
    {
        var task = PrimeTask();
        int timeout = 1000;
        if (await Task.WhenAny(task, Task.Delay(timeout)) == task)
        {
            return true;
        }
    
        return false;
    }

    代码说明一下就是1s内处理完毕就返回true,否则就是false。

    static void Main(string[] args)
    {
        Task<bool> t = TimeTask();
        Console.WriteLine(t.Result);
        Console.ReadKey();
    }

    最后简单的超时机制就弄好了~~

  • 相关阅读:
    Linux
    Linux
    Linux
    Linux
    Linux
    Python
    Linux
    Python
    MySQL
    Python
  • 原文地址:https://www.cnblogs.com/yinghualuowu/p/9831301.html
Copyright © 2011-2022 走看看