这段非常简单的代码在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”后挂起。await Task.Delay()永远不会返回。
我尝试了全新安装的Ubuntu 18和CentOS 7。我尝试了ASP.Net Core 3.0和3.1运行时(也都是全新安装)。
此代码仅用于演示目的。最初,当在ASP.Net BackgroundService中使用System.Threading.Timer(通过services.AddHostedService()注册)时,我开始遇到问题。定时器的回调函数也没有被调用。这种情况只发生在Linux下,而Windows可以很好地运行。
有人有想法如何解决这个问题吗?
更新:根据Herohtar的评论,我在Windows子系统Ubuntu上进行了测试。那里也能正常工作。现在我怀疑我的主机提供商(Strato.de的虚拟服务器)的Linux映像存在某些问题。
有人能想出Linux中可能导致这些问题的限制吗?
while (true) { Console.WriteLine(Environment.TickCount64); Thread.Sleep(1000); }
,并查看该值平均增加了多少? - Kevin Gosse