@@ -236,20 +236,20 @@ internal static bool CleanUpPotentialUnreachableDependentItems(JoinableTask sync
236236 // the reference count, we will calculate the entire reachable tree from the root. That will
237237 // tell us the exactly tasks which need track the synchronous task, and we will clean up the rest.
238238 HashSet < IJoinableTaskDependent > ? possibleUnreachableItems = syncTask . PotentialUnreachableDependents ;
239- if ( possibleUnreachableItems is object )
239+ if ( possibleUnreachableItems is object && possibleUnreachableItems . Count > 0 )
240240 {
241241 var reachableNodes = new HashSet < IJoinableTaskDependent > ( ) ;
242242 var syncTaskItem = ( IJoinableTaskDependent ) syncTask ;
243243
244244 JoinableTaskDependentData . ComputeSelfAndDescendentOrJoinedJobsAndRemainTasks ( syncTaskItem , reachableNodes , possibleUnreachableItems ) ;
245245
246- syncTask . PotentialUnreachableDependents = null ;
247246 allReachableNodes = reachableNodes ;
248247
249248 // force to remove all invalid items
250249 if ( possibleUnreachableItems . Count > 0 )
251250 {
252251 JoinableTaskDependentData . RemoveUnreachableDependentItems ( syncTask , possibleUnreachableItems , reachableNodes ) ;
252+ possibleUnreachableItems . Clear ( ) ;
253253
254254 return true ;
255255 }
@@ -600,7 +600,7 @@ internal bool HasMainThreadSynchronousTaskWaiting(IJoinableTaskDependent taskIte
600600 DependentSynchronousTask ? nextTrackingTask = existingTaskTracking . Next ;
601601 if ( ( existingTaskTracking . SynchronousTask . State & JoinableTask . JoinableTaskFlags . SynchronouslyBlockingMainThread ) == JoinableTask . JoinableTaskFlags . SynchronouslyBlockingMainThread )
602602 {
603- if ( existingTaskTracking . SynchronousTask . PotentialUnreachableDependents != null )
603+ if ( existingTaskTracking . SynchronousTask . HasPotentialUnreachableDependents )
604604 {
605605 // This might remove the current tracking item from the linked list, so we capture next node first.
606606 if ( ! CleanUpPotentialUnreachableDependentItems ( existingTaskTracking . SynchronousTask , out HashSet < IJoinableTaskDependent > ? allReachableNodes ) ||
@@ -642,12 +642,9 @@ internal void OnTaskCompleted(IJoinableTaskDependent thisDependentNode)
642642 RemoveDependingSynchronousTaskFrom ( childrenTasks , existingTaskTracking . SynchronousTask , false ) ;
643643
644644 HashSet < IJoinableTaskDependent > ? potentialUnreachableDependents = existingTaskTracking . SynchronousTask . PotentialUnreachableDependents ;
645- if ( potentialUnreachableDependents != null )
645+ if ( potentialUnreachableDependents is object && potentialUnreachableDependents . Count > 0 )
646646 {
647- if ( potentialUnreachableDependents . Remove ( thisDependentNode ) && potentialUnreachableDependents . Count == 0 )
648- {
649- existingTaskTracking . SynchronousTask . PotentialUnreachableDependents = null ;
650- }
647+ potentialUnreachableDependents . Remove ( thisDependentNode ) ;
651648 }
652649
653650 existingTaskTracking = existingTaskTracking . Next ;
@@ -879,7 +876,7 @@ private static void RemoveDependingSynchronousTaskFrom(IReadOnlyList<IJoinableTa
879876
880877 RemoveUnreachableDependentItems ( syncTask , remainNodes , reachableNodes ) ;
881878
882- syncTask . PotentialUnreachableDependents = null ;
879+ syncTask . PotentialUnreachableDependents ? . Clear ( ) ;
883880 }
884881 else if ( syncTask . PotentialUnreachableDependents != remainNodes )
885882 {
@@ -890,10 +887,6 @@ private static void RemoveDependingSynchronousTaskFrom(IReadOnlyList<IJoinableTa
890887 syncTask . PotentialUnreachableDependents = remainNodes ;
891888 }
892889 }
893- else
894- {
895- syncTask . PotentialUnreachableDependents = null ;
896- }
897890 }
898891
899892 /// <summary>
0 commit comments