我创建一个任务,该任务在DI解决的服务实例上调用方法:
using(var scope = container.BeginLifetimeScope())
{
var serviceInstance = scope.Resolve<IService>(serviceType);
return Task.Factory.StartNew(serviceInstance.DoTheWork());
}
这当然是不好的:一旦离开了using块,所有创建在示波器上的依赖项都将被丢弃-对“ DoTheWork()”的调用尚未完成,仍在使用注入的资源
这不是我想要的。我现在的解决方案是:
var scope = container.BeginLifetimeScope();
var serviceInstance = scope.Resolve<IService>(serviceType);
var task = Task.Factory.StartNew(serviceInstance.DoTheWork());
task.ContinueWith(t => { scope.Dispose(); });
问题是:这样安全吗?还是在某些情况下出于某种原因根本没有要求延续?