Ссылка на объект задачи не указывает на новую задачу - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть такой метод, который читает сообщение из Redis и запускает задачу после получения сообщения от Redis.

private Task _messageSentTask;

private void SubscribeOnMessage()
    {
        _messageSentTask = new Task<bool>(() => true);
        var sub = _redisConnection.GetSubscriber();

        sub.Subscribe(_redisChannel, (channel, msg) =>
        {
            _receivedMessage = JsonConvert.DeserializeObject<MyMessage>(msg);
            _messageSentTask.Start();
        });
    }

При первом запуске этого метода все в порядке, но у меня проблема с _messageSentTask.Start(); при запуске во второй раз и так далее:

System.InvalidOperationException: 'Start may not be called on a task that has completed.'

Я делаю _messageSentTask = new Task<bool>(() => true)перед подпиской и запуском Задачи:

sub.Subscribe(_redisChannel, (channel, msg) =>
    {
        _receivedMessage = JsonConvert.DeserializeObject<MyMessage>(msg);
        _messageSentTask.Start();
    });

почему _messageSentTask не указывает на новую Задачу, а остается старой завершенной?

1 Ответ

0 голосов
/ 20 сентября 2018

Используйте Task.Run вместо использования конструктора задач для создания новой задачи.

Подробнее о https://blog.stephencleary.com/2014/05/a-tour-of-task-part-1-constructors.html

Task.Run<bool>(() =>
        {
            return true;

        });
...