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

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

 

posted @   樱花落舞  阅读(6671)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
历史上的今天:
2016-10-25 如何用Pr完成作业~
点击右上角即可分享
微信分享提示