Поддерживать экземпляр объекта зависимости в потоке - PullRequest
0 голосов
/ 14 сентября 2018

Нужна помощь по вопросу ниже, у меня есть метод ниже:

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

Примечание: Здесь я не хочу использовать ключевое слово async/await, так как мне плевать на результат метода DoTheStuff(). Мне просто нужно открыть один поток и выполнить код.

DoTheStuff() метод относится к объектам, которые вводятся посредством внедрения зависимостей (Autofac). и в Module.Config я зарегистрировал все необходимые зависимости с помощью lifetimecope.

Ниже приведена проблема с вызовом Task.Run(() => DoTheStuff()) запускается новый поток, выполняющий метод DoTheStuff().
В то же время метод Test() завершает свое выполнение с возвратом Ok(), но метод DoTheStuff все еще работает асинхронно.

При выполнении метода Test() зарегистрированные зависимости удаляются, а метод DoTheStuff() выдает ниже исключения:

Вложенное время жизни невозможно создать из LifetimeScope, поскольку оно имеет уже утилизирован

Может кто-нибудь сообщить мне, как сохранить экземпляр объекта зависимости в потоке?

1 Ответ

0 голосов
/ 28 октября 2018

Я вижу пару вариантов.

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

Дайте мне знать, если ни одна из этих работ.

...