对Task对象的引用未指向新Task

时间:2018-09-20 09:06:46

标签: c# task-parallel-library stackexchange.redis

我有这样的方法,它从Redis读取消息并在从Redis获得消息后运行Task。

student (4)

在此方法的第一次运行中,一切都可以,但是第二次运行时,student_takes_course (3出现问题,依此类推:

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)不是指向新任务,而是保持旧任务完成?

1 个答案:

答案 0 :(得分:1)

使用Task.Run而不是使用Task构造函数来创建新任务。

有关https://blog.stephencleary.com/2014/05/a-tour-of-task-part-1-constructors.html的更多详细信息

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

        });