运行 工人服务中的 Discord 机器人而不是控制台应用程序?

Run Discord bot in a worker service instead of a console app?

我想创建一个 Discord 机器人,DSharpPlus 和 Discord.Net 在他们的教程中都使用控制台应用程序。

我想知道这是否有任何原因,因为在考虑它时,工作人员服务应用程序似乎更适合,不是吗?我可以在 StartAsync 方法中设置机器人,如果需要,我可以在 StopAsync 方法中处理所有东西。

有人知道为什么首选控制台应用程序吗?也许工人服务有我目前不知道的缺点?

也许机器人会与 ExecuteAsync 方法发生冲突?

public class Worker : BackgroundService
{
    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            await Task.Delay(1000, stoppingToken);
        }
    }
}

So does someone know why console applications are preferred? Perhaps worker services have disadvantages that I am not currently aware of?

.NET Code 声明了跨平台支持,这意味着您可以为不同的目标平台使用相同的源代码。正因为如此,.NET 必须对长 运行 背景事物使用某种“服务”理念,但不绑定到特定平台。在 Linux 上,任何控制台应用程序都可以是“服务”应用程序(看看:https://swimburger.net/blog/dotnet/how-to-run-a-dotnet-core-console-app-as-a-service-using-systemd-on-linux). On Windows it is a bit different, but still quite simple (have a look: https://dotnetcoretutorials.com/2019/12/07/creating-windows-services-in-net-core-part-3-the-net-core-worker-way/.

Maybe the bot will struggle with the ExecuteAsync method?

BackgroundService class 被设计为任何“服务”的基础 class,因此,我认为,没有更好的扩展候选人:)