【发布时间】:2020-05-05 23:15:00
【问题描述】:
我注意到 .NET Core 3 Tasks 无法在我的基于 Ubuntu 18.04 的虚拟服务器上运行(提供商是 Strato.de 和 HostEurope.de)。
这是一个非常基本的测试程序:
static void Main(string[] args) {
Console.WriteLine("Hello");
Task.Delay(2000).ContinueWith(_ => Console.WriteLine("Fire"));
Thread.Sleep(5000);
Console.WriteLine("Exit");
}
应用程序应立即打印"Hello",然后在2 秒后打印"Fire",最后打印"Exit"。
这在我的 Windows 计算机和 Ubuntu 18.04 计算机上都可以正常工作。
但是当我在虚拟服务器上运行代码时,第二条消息永远不会打印出来。 Threading.Timer 和 Timers.Timer 也有同样的问题,它们几乎从不开火(有时,但很少会开火)。
编辑:两个虚拟服务器都在 OpenVZ 上运行,至少 systemd-detect-virt 是这么说的。我相应地更改了问题的标题。
知道可能是什么问题吗?
【问题讨论】:
-
如果有错,请给我一个更正的例子。我不明白为什么 async 应该修复它。
-
我已经检查了虚拟服务器上是否没有足够的线程可用(使用
ThreadPool的方法),但这似乎不是问题:Min threads: 6 * worker, 6 * completion; Max threads: 32767 * worker, 1000 * completion; Available threads: 32767 * worker, 1000 * completion -
问题没有出现在由 Azure 托管的 Ubuntu 18.04 服务器上(底层虚拟化是“Microsoft ...”而不是“OpenVM” )。
标签: c# .net-core task openvz virtual-server