【问题标题】:Maintain dependency object instance within the thread在线程内维护依赖对象实例
【发布时间】:2019-02-19 09:30:14
【问题描述】:

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

public IHttpActionResult Test()
{
    Task.Run(() => DoTheStuff())
    Return Ok()
}

注意:这里我不想使用async/await 关键字,因为我不关心DoTheStuff() 方法的结果。我只需要打开一个线程并执行代码。

DoTheStuff() 方法是指通过依赖注入(Autofac)注入的对象。在 Module.Config 中,我已经注册了所有必需的依赖项和生命周期。

下面的问题我面临调用Task.Run(() => DoTheStuff()) 启动新线程执行DoTheStuff() 方法。
同时Test()方法完成执行,返回Ok(),但DoTheStuff方法仍在异步运行。

随着Test()方法的执行,注册的依赖被释放,DoTheStuff()方法抛出以下异常:

无法从 LifetimeScope 创建嵌套生命周期,因为它具有 已经处理了

谁能告诉我如何在线程中维护依赖对象实例?

【问题讨论】:

  • 请提供包含依赖项注册的代码。请说,如果Test 方法属于控制器?

标签: asynchronous dependencies task autofac


【解决方案1】:

我可以看到几个选项。

  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();
    

如果这些都不起作用,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 2016-10-05
    • 1970-01-01
    • 2011-01-07
    • 2011-02-20
    相关资源
    最近更新 更多