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();
}

最后簡單的超時機制就弄好了~~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM