【发布时间】:2018-12-02 12:30:25
【问题描述】:
我在使用 ASP.NET Core 托管服务中的后台任务的 while 循环和事件方面遇到了一些问题。我试图让我的 Progress_Changed 事件从while (!cancellationToken.IsCancellationRequested) 部分中触发,以便在应用程序运行时连续捕获数据。我一直在关注这些指南:
Background tasks with hosted services in ASP.NET Core
Implement background tasks in microservices with IHostedService and the BackgroundService class
如何在保持 BackgroundService 连续循环的同时捕获事件,以便始终能够获取数据?我希望将它与 SignalR 一起使用,以便将数据馈送到集线器。
public class MyBackgroundService : BackgroundService
{
private readonly ICustomService _service;
private IProgress<JSONMessage> _progress;
public MyBackgroundService(ICustomService service)
{
_service = service;
_progress = new Progress<JSONMessage>();
_progress.ProgressChagned += Progress_Changed;
{
protected override async Task ExecuteAsync(CancellationToken cancellationToken)
{
await _service.StartService(_progress);
while (!cancellationToken.IsCancellationRequested)
{
await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
}
}
private void Progress_Changed(object s, JSONMessage e)
{
Console.WriteLine(e.Id);
}
}
【问题讨论】:
-
运行此代码时当前发生了什么?换句话说,它有什么问题?异常、行为等...
-
事件在早期触发,或者至少在我单步执行代码时触发,但在直接运行时它永远不会输出。
标签: c# asp.net asp.net-core signalr asp.net-core-2.0