无法在Linux下使用.Net Core等待Task.Delay

时间:2019-12-21 07:15:40

标签: c# linux .net-core async-await

在Linux下,此非常简单的代码与Windows计算机上的代码不同:

    class Program
    {
        async static Task Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            for (int i = 0; i < 5; i++)
            {
                await Task.Delay(TimeSpan.FromSeconds(1));
                Console.WriteLine("" + i);
            }

            Console.WriteLine("Bye bye");
        }
    }

这应该产生类似

的输出
Hello World

0

1

.. 

4

Bye bye

如果在Windows中发布,它在开发中效果很好。如果发布用于Linux,则在推出“ Hello World”后挂起。等待Task.Delay()永远不会返回。

我尝试过全新安装Ubuntu 18和CentOS7。我尝试过使用ASP.Net Core 3.0运行时和3.1(也都是全新安装)。

此代码仅用于演示目的。最初,在ASP.Net BackgroundService(通过services.AddHostedService()注册)中使用System.Threading.Timer时,我开始遇到问题。计时器的回调也没有被调用。这也仅在Linux下发生,而Windows则运行良好。

有人知道如何解决这个问题吗?

更新 从Herohtar发表评论后,我已经在Windows子系统Ubuntu上进行了测试。它也在那里工作。 现在,我怀疑托管者(Strato.de上的虚拟服务器)的Linux映像已损坏。

有人能想到Linux中可能引起此类问题的限制吗?

1 个答案:

答案 0 :(得分:1)

得到Strato的答复后,我可以在这里发布我自己的问题的答案:Strato正在使用Virtuozzo进行虚拟化。出于安全原因,他们还禁用了某些功能,以使.Net core ist不在此处运行。

对于其他所有人也有同样的问题:您完全不能在Strato Linux V服务器上使用.Net内核。

致力为所有人提供帮助!