[程式開發技巧] 在C# Console中保持程式繼續執行不關閉 | 不使用ReadLine方法

一般要避免Console自動結束執行
都是直接使用ReadLine或ReadKey
但是如果要同時保持執行 & 多執行緒 & 被動取得輸入
上述方法就會不適用

此時使用Task即可達成

[ 使用async/await ]

static async Task Main(string[] args)
{
    /* 其他非同步方法或事件,例如WebSocket事件等等,可以持續使用ReadLine... */
    await Run();
}

private static async Task Run()
{
    await Task.Run(async () => {
        await Task.Delay(-1);
    });
}

[ 不使用async/await ]

static void Main(string[] args)
{
    /* 其他非同步方法或事件,例如WebSocket事件等等,可以持續使用ReadLine... */
    Run().Wait();
}

private static async Task Run()
{
    await Task.Run(async () => {
        await Task.Delay(-1);
    });
}

兩者差別只在於Main有無使用關鍵字

此原理是使用Task.Delay方法帶入-1數值
讓程式變成無限等待
但是ReadLine相關方法還是可以正常使用
強制結束時也只要CTRL + C就可以了

留言