Gets the list of task pre conditions.
Namespace: AGI.Parallel.Client
Assembly: AGI.Parallel.Client (in AGI.Parallel.Client.dll) Version: 1.2.0.275 (1.2.0.275)

Syntax

C#
public TaskPreconditionCollection TaskPreconditions { get; }
Visual Basic
Public ReadOnly Property TaskPreconditions As TaskPreconditionCollection
        Get

Field Value

The task pre-conditions.

Examples

  Copy imageCopy
using System;
using System.Collections.Generic;
using AGI.Parallel.Client;
using AGI.Parallel.Infrastructure;

namespace CodeSamples
{
    class Program
    {
        static void Main(string[] args)
        {
            using (IJobScheduler scheduler = new ClusterJobScheduler("localhost"))
            {
                scheduler.Connect();

                // Check if this feature is supported by querying for the IEnforceTaskPrecondition interface.
                IEnforceTaskPrecondition preconditionCapable = scheduler as IEnforceTaskPrecondition;
                if (preconditionCapable != null)
                {
                    IList<AgentSnapshot> agents = ((IGetAgentInfo)preconditionCapable).GetAgentInfo();
                    string agentMachineName = agents[0].MachineName;

                    Job job = scheduler.CreateJob();

                    // Restrict the task to be run only on the first agent machine.
                    job.TaskPreconditions.Add(CommonResources.Hostname, Operator.MemberOf, new string[] { agentMachineName });

                    // Restrict the task to be run on machines that have at least 1 empty host slot.
                    job.TaskPreconditions.Add(CommonResources.AvailableCores, Operator.GreaterThan, 0);

                    job.AddTask(new RestrictedTask());

                    job.Submit();
                    job.WaitUntilDone();

                    Console.WriteLine(job.Tasks[0].Result);
                }
                else
                {
                    Console.WriteLine("This job scheduler does not support task preconditions.");
                }
            }

            /*
             * The output of the application should resemble:
             * Hello from MyComputerName
             */
        }

        [Serializable]
        public class RestrictedTask : Task
        {
            public override void Execute()
            {
                this.Result = "Hello from " + Environment.MachineName;
            }
        }
    }
}

See Also