Why does my FTimeline only tick twice?

I assigned a delegate, called TimelineDeal, to call after each timeline tick but this delegate only gets called twice. I am calling TickTimeline() in the actor’s tick. My timeline is set to play for 4 seconds, but whether it’s 4 seconds or 4000 seconds, the result is the same. Considering the timeline should tick every time the actor’s tick is called, I don’t know why it would stop after 2 times. Here is my code:

##.h

 FTimeline TDeal;
 FOnTimelineEvent TDealUpdate;
 int32 TimelineDealCounter;

##.cpp

 ASCard::ASCard(const FObjectInitializer& ObjectInitializer)
 {
      PrimaryActorTick.bCanEverTick = true;
      TDeal = FTimeline();
      TimelineDealCounter = 0;
      ...
 }

 void ASCard::Tick(float DeltaTime)
 {
      TDeal.TickTimeline(DeltaTime);
 }

 void ASCard::Dealing()
 {
      TDealUpdate.BindUFunction(this, FName("TimelineDeal"));
      TDeal.SetTimelinePostUpdateFunc(TDealUpdate);
      TDeal.SetLooping(false);
      TDeal.SetTimelineLength(4.f);

      TDeal.PlayFromStart();
 }

 void ASCard::TimelineDeal()
 {
      TimelineDealCounter++;
      GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::FromInt(TimelineDealCounter));
      ...
 }

Dealing() is called on this actor from my GameMode class.

This may have something to do with it, but I still don’t see how it would be getting called more than twice in one frame, given that it’s only called once in tick.

Tried checking GetPlaybackPosition this two times?

The only way I can get it to continuously play is by adding:

 TDeal.Play(); 

at the top of TimelineDeal(). However, doing this seems to make it ignore the length. It will just run forever. It also seems redundant to add TDeal.Play() considering I already set it to PlayFromStart().