我有这样的方法,它从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)
不是指向新任务,而是保持旧任务完成?
答案 0 :(得分:1)
使用Task.Run而不是使用Task构造函数来创建新任务。
有关https://blog.stephencleary.com/2014/05/a-tour-of-task-part-1-constructors.html的更多详细信息
Task.Run<bool>(() =>
{
return true;
});