.NET Core 任务无法在 OpenVZ 虚拟服务器上运行
.NET Core Tasks not working on OpenVZ virtual server
我注意到 .NET Core 3 Task
无法在基于 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
是这么说的。我相应地更改了问题的标题。
知道问题出在哪里吗?
如果能够使用异步Main
,则考虑以下
public static async Task Main(string[] args) {
Console.WriteLine("Hello");
var task1 = Task.Run(async () => {
await Task.Delay(2000);
Console.WriteLine("Fire");
});
var task2 = Task.Delay(5000);
await Task.WhenAll(task1, task2);
Console.WriteLine("Exit");
}
避免混合异步调用和阻塞调用,例如 Task.Delay
和 Thread.Sleep
。如果要异步,请一直走。
这是一个已知错误,将在 .NET Core 3.1.2 中修复
见https://github.com/dotnet/runtime/issues/2070 and https://github.com/dotnet/coreclr/issues/26873
我注意到 .NET Core 3 Task
无法在基于 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
是这么说的。我相应地更改了问题的标题。
知道问题出在哪里吗?
如果能够使用异步Main
,则考虑以下
public static async Task Main(string[] args) {
Console.WriteLine("Hello");
var task1 = Task.Run(async () => {
await Task.Delay(2000);
Console.WriteLine("Fire");
});
var task2 = Task.Delay(5000);
await Task.WhenAll(task1, task2);
Console.WriteLine("Exit");
}
避免混合异步调用和阻塞调用,例如 Task.Delay
和 Thread.Sleep
。如果要异步,请一直走。
这是一个已知错误,将在 .NET Core 3.1.2 中修复
见https://github.com/dotnet/runtime/issues/2070 and https://github.com/dotnet/coreclr/issues/26873