现在我正在使用带有套接字作为属性的类,但我想知道如何以更好的方式处理这种情况。该类在DI中注册为单例,并且套接字上的Connect
方法在构造函数中调用。
答案 0 :(得分:1)
IHostedService
它们被设计为在后台运行长时间运行的任务的主要手段。
基本上,您需要做的是创建一个保存您的连接的类,实现IHostedService
。 (如果您使用的是.NET Core 2.1+,则可以通过从BackgroundService
派生并覆盖ExecuteAsync
来轻松实现。
然后,您只需在启动(services.AddSingleton<IHostedService, YourHostedService>()
)时将其注册为单例课程,框架就会自动识别它并为您管理启动和停止。
有两个优点:
CancellationToken
和可配置的超时时间。IHostedService
,还需要使用其他接口进行注册)。这使您可以从控制器等调用套接字管理器上的方法。这是我的两个有关托管服务的教程,但您也可以找到其他人:
答案 1 :(得分:0)
一种好的技术是创建一种扩展方法,例如针对UseMySocket
类型的IWebHostBuilder
。您可以在CreateWebHostBuilder
类的Program
方法中使用它。请记住,您必须以不阻塞当前线程的方式来实现它。例如:
WebHost.CreateDefaultBuilder(args)
.UseMySocket()
.UseStartup<Startup>();
另一种技术是为套接字创建单例类型,然后实例化并将其注入到ConfigureServices
类中的Startup
方法中的服务集合中。