You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# 10 Pocket Reference中Task示例在Ubuntu环境下无法正常输出

问题解决:Task示例无输出及.NET 5 GLIBC依赖问题

一、Task示例无输出的原因与修复

你的代码逻辑本身没问题,但控制台程序的主线会在启动后台任务后直接退出,不等OnCompleted中的续代码执行。因为Task.Run会把计算放到线程池线程,主线程跑完所有同步代码就结束了,后台线程还没来得及完成计算或执行Console.WriteLine。

修复方案(任选其一)

  1. 主线程等待任务完成
    在代码最后添加task.Wait();,强制主线程等待任务结束:

    Task<int> task = ComplexCalculationAsync();
    var awaiter = task.GetAwaiter();
    
    awaiter.OnCompleted(() => // Continuation
    {
        int result = awaiter.GetResult();
        Console.WriteLine(result); // 116
    });
    
    task.Wait(); // 等待任务完成
    
    Task<int> ComplexCalculationAsync() => Task.Run(() => ComplexCalculation());
    
    int ComplexCalculation()
    {
        double x = 2;
        for (int i = 1; i < 100000000; i++)
            x += Math.Sqrt(x) / i;
        return (int)x;
    }
    
  2. 改用async/await(更符合现代C#写法)
    把Main方法改成异步,直接用await等待任务,这是更推荐的方式:

    using System;
    using System.Threading.Tasks;
    
    class Program
    {
        static async Task Main()
        {
            int result = await ComplexCalculationAsync();
            Console.WriteLine(result); // 116
        }
    
        static Task<int> ComplexCalculationAsync() => Task.Run(() => ComplexCalculation());
    
        static int ComplexCalculation()
        {
            double x = 2;
            for (int i = 1; i < 100000000; i++)
                x += Math.Sqrt(x) / i;
            return (int)x;
        }
    }
    
  3. 让主线程保持运行
    在代码最后添加Console.ReadKey();,等待用户输入后再退出,确保后台任务有时间执行:

    // ... 原有代码 ...
    Console.ReadKey();
    

二、.NET 5 GLIBC依赖缺失问题

Ubuntu 22.04默认使用GLIBC 2.35,而.NET 5的运行时依赖的GLIBC版本较低(部分版本依赖2.31及以下),导致兼容性问题。解决办法:

  • 优先使用.NET 6:你已经有.NET 6.0.11环境,它完全兼容Ubuntu 22.04,没必要再用.NET 5。
  • 若必须用.NET 5:安装GLIBC兼容包,或者使用.NET 5的独立部署版本(self-contained deployment),打包时包含所有依赖,不依赖系统GLIBC。

内容的提问来源于stack exchange,提问作者Jordi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 19:21:07