需要以下问题的帮助,我有以下方法:
public IHttpActionResult Test()
{
Task.Run(() => DoTheStuff())
Return Ok()
}
注意:在这里,我不想使用async/await
关键字,因为我不在乎DoTheStuff()
方法的结果。我只需要打开一个线程并执行代码即可。
DoTheStuff()
方法引用通过依赖项注入(Autofac)注入的对象。并且在Module.Config中,我已经向lifelifescope注册了所有必需的依赖项。
以下问题是我面临的对Task.Run(() => DoTheStuff())
的调用会启动执行DoTheStuff()
方法的新线程。
同时,Test()
方法以返回Ok()
的形式完成了执行,但是DoTheStuff
方法仍在异步运行。
通过执行Test()
方法,处置已注册的依赖项,并且DoTheStuff()
方法引发以下异常:
无法从LifetimeScope创建嵌套寿命 已经被处置
有人可以让我知道如何在线程内维护依赖对象实例吗?
答案 0 :(得分:0)
我可以看到几个选择。
将DoTheStuff
提取到自己的服务中。在DoTheStuff
中将要注入和使用的服务注册为InstancePerDependency
,以便该服务获得其自己的实例。参见https://autofaccn.readthedocs.io/en/latest/lifetime/instance-scope.html。
添加一个Wait
:
var t = Task.Run(() => DoTheStuff());
t.Wait();
return Ok();
让我知道这两个都不起作用吗