免责声明:我可能有一个坏主意!观察员为火&忘记任务
我在ASP.NET 5上有一个中间件。 这个中间件处理请求并启动一个新的Task
。该任务主要用于统计目的。 中间件不关心这个任务的结果。
由于性能原因,我想继续ASP.NET管道而不等待“背景”任务。
我看到实现这个三路:
1 /启动任务,没有await
或.Wait()
。不关心未观察到的异常。
2 /在“observer
”中注册该任务。观察员将观察所有任务,直到应用程序结束。
3 /使用服务总线和/或某种工作角色/ WebJob。
我不喜欢解决方案1 /。
解决方案3 /看起来过多。
将溶液2 /即可我,用类似的东西:
public class TaskObserver : IDisposable
{
private readonly List<Task> _tasks = new List<Task>();
public void RegisterTask(Task task)
{
_tasks.Add(task)
}
public void Dispose()
{
Task.WaitAll(_tasks.ToArray());
}
}
// somewhere in the service configuration...
serviceCollection.AddSingleton<TaskObserver>();
观察员将在其容器中的最终应用处。 我甚至可以定期添加Timer
清理已完成的任务。
2 /解决方案在ASP.NET 5上下文中是否正确?
更新:[在使用IHostedService和BackgroundService类的.NET Core 2.x webapps或微服务中实现后台任务](https://blogs.msdn.microsoft.com/cesardelatorre/2017/11/18/implementing-background -tasks-in-microservices -with-ihostedservice-and-the-backgroundservice-class-net-core-2-x /) –