在线程内维护依赖对象实例

时间:2018-09-14 14:36:05

标签: asynchronous dependencies task autofac

需要以下问题的帮助,我有以下方法:

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创建嵌套寿命   已经被处置

有人可以让我知道如何在线程内维护依赖对象实例吗?

1 个答案:

答案 0 :(得分:0)

我可以看到几个选择。

  1. DoTheStuff提取到自己的服务中。在DoTheStuff中将要注入和使用的服务注册为InstancePerDependency,以便该服务获得其自己的实例。参见https://autofaccn.readthedocs.io/en/latest/lifetime/instance-scope.html

  2. 添加一个Wait

    var t = Task.Run(() => DoTheStuff());
    t.Wait();
    return Ok();
    

让我知道这两个都不起作用吗