我正试图在我的.NET Maui应用程序中创建一个BackgroundService,它将在应用程序持续运行时侦听TCP连接.

我试图像往常一样,通过MauiProgram.cs中的AddHostedService<>()依赖项注入来创建这个BackgroundService,然而,它似乎从未在操作期间启动过服务.

到目前为止,我的服务是这样的(它只是调试消息,以验证它是否正在运行):

class TcpListenerService : BackgroundService
{
    readonly ILogger<TcpListenerService> _logger;

    public TcpListenerService(ILogger<TcpListenerService> logger)
    {
        _logger = logger;
    }

    protected async override Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            _logger.LogInformation("Listener running at: {time}", DateTime.Now);
            await Task.Delay(1000, stoppingToken);
        }
    }
}

我是这样登记的: builder.Services.AddHostedService<Services.TcpListenerService>();

没有通过这些记录器消息输出到控制台.我是不是做错了什么?还是毛伊岛出了什么 fresh 事?这款应用目前只针对Windows.

推荐答案

后台服务似乎已经从毛伊岛删除了,原因有几个.尤其是因为这个原因,根据Eric Erhardt

扩展.托管的主要概念是它的"托管服务"或 后台服务.虽然这绝对是一个有用的概念,但是 客户端应用程序,抽象对于客户端应用程序是不正确的. 托管服务得到"启动"和"停止".但如果这个应用程序 停用?这项服务能分辨出这一点和 应用程序正在关闭?如果所有托管服务在 应用程序恢复了吗?这些都是需要工作和 托管服务抽象不是为这些场景设计的. 需要后台服务功能的毛伊岛应用程序需要使用 专为客户端应用程序设计的东西.

你可以找到完整的讨论here

他们的建议是用Shiny

Csharp相关问答推荐

C#中的包版本控制

PredicateBuilder不是循环工作,而是手动工作

. NET 8 HttpClient post参数将其情况更改为camel'

C#相同名称的枚举方法和normal方法,参数类型不同

找不到网址:https://localhost:7002/Category/Add?区域= Admin.为什么我的URL是这样生成的?area = Admin而不是/Admin/

如何模拟耐久任务客户端在统一测试和获取错误在调度NewsListationInstanceAsync模拟设置

创建临时Collection 最有效的方法是什么?堆栈分配和集合表达式之间的区别?

JsonSerializer.Deserialize<;TValue>;(String,JsonSerializerOptions)何时返回空?

为什么Regex.IsMatch(";\\t";,";\\t";)返回FALSE而不是TRUE?

如何在ASP.NET Core8中启用REST应用程序的序列化?

在不添加不必要的尾随零的情况下本地化浮点型?

C#中Java算法的类似功能

MSTest--将消息直接写入StdOut和使用TestContext有什么不同?

为值对象编写自定义JsonConverter

WPF DataGrid文件名列,允许直接输入文本或通过对话框按键浏览

.Net MAUI,在将FlyoutPage添加到容器之前,必须设置添加构造函数导致Flyout和Detail"

.NET8->;并发词典总是比普通词典快...怎么回事?[包含基准结果和代码]

在C#ASP.NET内核中使用INT AS-1进行控制器场景的单元测试

是否可以在Entity Framework Core中使用只读 struct 作为拥有实体?

SendInput无法在C#中正确模拟键盘