final class · System.Threading.Tasks

WhenAllTask

final class WhenAllTask : Task

Waits for every task of a list: each one that finishes runs it, and it counts what is left.

Kind
final class
Namespace
System.Threading.Tasks
Assembly
System.Core
Access
internal, final
Source file
Tasks.ant

Inheritance

Base classes
Any Task WhenAllTask

Constructors

new(Task[] tasks)
#

Methods

override Run()
#

override

AddWaiterTo(Task task)
#

Private and internal members (2)

Task[] tasks
#

private

i32 next
#

private

Inherited members (23)

Source

WhenAllTask as Antril, decompiled from its Larva HIR.

System.Threading.Tasks.WhenAllTask.ant
// System.Threading.Tasks.WhenAllTask — System.Core (decompiled from Larva HIR)

into namespace System.Threading.Tasks
{
	/// Waits for every task of a list: each one that finishes runs it, and it counts what is left.
	final class WhenAllTask : Task
	{
		Task[] tasks;
		i32 next;

		public:
			new(Task[] tasks)
			{
				this.tasks = tasks;
			}

			override Run()
			{
				loop (next < tasks.Length)
				{
					Task task = tasks[next];
					if (!task.IsCompleted)
					{
						AddWaiterTo(task);
						return;
					}
					if (task.IsFaulted)
					{
						try
						{
							task.Check();
						}
						catch (any failure)
						{
							Fail(failure);
							return;
						}
					}
					next++;
				}
				Complete();
			}

			AddWaiterTo(Task task)
			{
				Pause(task);
			}
	}
}
Esc