How to delay 'hot' tasks so they can processed in a set order

后端 未结 2 885
伪装坚强ぢ
伪装坚强ぢ 2021-01-15 23:28

Say I have a set of tasks:

        var task1 = DoThisAsync(...);
        var task2 = DoThatAsync(...);
        var task3 = DoOtherAsync(...);
        var tas         


        
2条回答
  •  一整个雨季
    2021-01-16 00:08

    you can simply create tasks with its constructor and then, call execution with .Start() methods.

    Here an example:

    var taskList = InitQueue();
    foreach (var t in taskList.OrderBy(i => i.Order))
    {
        //Here I can skedule an existing task
        t.TaskToRun.Start();
        t.TaskToRun.Wait();
        Console.WriteLine($"Task {t.Order} has finished its job");
    }
    
    
    public class TaskQueue : List
    {
    }
    
    public class TaskItem
    {
        public int Order { get; set; }
        public Task TaskToRun { get; set; }
    }
    
    private static TaskQueue InitQueue()
    {
        var queue = new TaskQueue();
        queue.Add(new TaskItem
        {
            Order = 1,
            TaskToRun = new Task(() =>
            {
                Task.Delay(500);
                Console.WriteLine("Hello from task 1");
            })
        });
        queue.Add(new TaskItem
        {
            Order = 4,
            TaskToRun = new Task(() => Console.WriteLine("Hello from task 4"))
        });
        queue.Add(new TaskItem
        {
            Order = 3,
            TaskToRun = new Task(() =>
            {
                Task.Delay(5000);
                Console.WriteLine("Hello from task 3");
            })
        });
        queue.Add(new TaskItem
        {
            Order = 2,
            TaskToRun = new Task(() => Console.WriteLine("Hello from task 2"))
        });
    
        return queue;
    }
    

提交回复
热议问题