Как использовать зависимости в методе asyn c (не ожидаемый метод) - PullRequest
1 голос
/ 13 июля 2020

У меня есть класс с областью действия _repository и одним асинхронным c методом MethodAsync(....) Я вызываю метод без ожидания (выстрелил и забыл). Я хочу использовать внедренную зависимость после ожидания (в перехвате), но в это время запрос завершен, и я получил сообщение об ошибке: Невозможно получить доступ к удаленному объекту.

Я думаю, что эта ошибка ожидаемое поведение, но Как я могу использовать внедренные зависимости таким образом? Я мог бы ввести ServiceProvider и запросить зависимости, но внедрение ServiceProvider - плохая практика. Как я могу решить эту проблему без внедрения ServiceProvider?

Я вызываю метод следующим образом:

example.MethodAsync(....);//without await

Это класс

public class Example
{
    private readonly Repository _repository;

    public Example(Repository repository)
    {
        _repository = repository;
    }

    public async Task MethodAsync(....)
    {
        try
        {
            await DoSomething();
        }
        catch (Exception e)
        {
            _repository.Example.Remove(....);
        }
    }
}

1 Ответ

1 голос
/ 13 июля 2020

Вы можете как запустить его, так и забыть, используя при этом все возможности DI, используя планировщик заданий .

Таким образом, вы, кроме того, можете сохранить отслеживать состояние выполненного задания. Кроме того, возможна настройка retry-on-failure.

Я использую Hangfire для этого задания:

BackgroundJob.Enqueue<Example>(service => service.MethodAsync());
...