簡體   English   中英

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

[英]Cannot await Task.Delay with .Net Core under Linux

這段非常簡單的代碼在 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(通過 services.AddHostedService() 注冊)中使用System.Threading.Timer時開始遇到問題。 那里的計時器回調也沒有被調用。 這也只發生在 Linux 下,而 Windows 運行良好。

有誰知道如何解決這個問題?

更新Herohtar 發表評論后,我在 Windows 子系統 Ubuntu 上進行了測試。 它也在那里工作。 現在我懷疑我的主機(Strato.de 上的虛擬服務器)的 Linux 映像不知何故損壞了。

有人能想到 Linux 中可能導致此類問題的限制嗎?

在得到 Strato 的回復后,我可以在這里發布我自己問題的答案:Strato 正在使用 Virtuozzo 進行虛擬化。 出於安全原因,他們還禁用了一些功能,因此 .Net 核心不在那里運行。

對於有同樣問題的其他人:您根本無法在 Strato Linux V-Server 上使用 .Net 核心。

感謝所有試圖提供幫助的人!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM