Extension.JobSchedule

Schedule task in a procedure queue


Keywords
C#, .NET, Task, Thread, parallelism, Schedule, Interporality
License
Apache-2.0
Install
Install-Package Extension.JobSchedule -Version 1.0.7

Documentation

Extension.JobSchedule

Schedule task in a procedure queue


    ##################################
    ## Example: TarefaStatus.aspx.cs #
    ##################################
	
    /// <summary>
    /// Adding a Task to a Processing Queue
    /// </summary>
    /// <param name="guid"> Contract Identifier. 
    /// Any adding task in this GUID will be adding in the queue for processing, 
    /// respecting the order of arrival</param>
    /// <param name="taskName">Tasks to run in the contract queue identified by your GUID</param>
    /// <returns></returns>
    [WebMethod]
    [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json, XmlSerializeString = false)]
    public static string StartTask(string guid, string taskName)
    {
        try
        {

            // Create a new contract with a GUID identifier, add a handle to the task that will be executed.
            using (var c = new ContractSchedule(guid, taskName))
            {
                // Adds an ACTION with delegate to the method that will perform the task
                c.ActionTask = delegate
                {
                    // Delegated method receiving parameter with processing status
                    Loading(c.Status);
                };

                // Add task in processing queue
                QueueJob.AddTask(new ScheduledTask(c, c.ActionTask));
            }
            return "true";
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            return JsonConvert.SerializeObject("false");
        }
    }

    ################################
    ## Example: StatusProcess.ashx #
    ################################		
	
	/// <summary>
	/// Summary description for StatusProcess
	/// Tracking processing status of a task through 
	/// the contract identifier GUID and task name
	/// </summary>
	public class StatusProcess : IHttpHandler
	{
		public void ProcessRequest(HttpContext context)
		{
			context.Response.ContentType = "text/json";
			var callback = context.Request.QueryString["callback"];

			if (context.Request.QueryString["guid"] == null || context.Request.QueryString["taskName"] == null)
				return;

			var json = this.GetCustomersJSON(context.Request.QueryString["guid"], context.Request.QueryString["taskName"]);

			if (!string.IsNullOrEmpty(callback))
				json = $"{callback}({json})";

			context.Response.Write(json);
		}

		/// <summary>
		/// Queries processing status of a task through its GUID and name
		/// </summary>
		/// <param name="customerGuid">Identify the linked contract tasks</param>
		/// <param name="customerTaskName">Name of the task you want to get processing status</param>
		/// <returns></returns>
		private string GetCustomersJSON(string customerGuid, string customerTaskName)
		{
			// Gets contract processing status
			var stt = QueueJob.ProcessStatus(customerGuid, customerTaskName);
			return JsonConvert.SerializeObject(stt);
		}
		public bool IsReusable => true;
	}