How to get notification that a System.Threading.Tasks.Task has completed

前端 未结 6 606
广开言路
广开言路 2020-12-14 15:14

I am currently replacing some home baked task functionality with a new implementation using the new System.Threading.Tasks functionality found in .net 4.

I have a sl

6条回答
  •  忘掉有多难
    2020-12-14 15:25

    I created a small example illustrating Jon Skeet's answer, which I'd like to share with you:

    using System;
    using System.Threading;
    using System.Threading.Tasks;
    
    public class Program
    {
        static void Main(string[] args)
        {
            for (int cnt = 0; cnt < NumTasks; cnt++)
            {
                var task = new Task(DoSomething); // any other type than int is possible
                task.ContinueWith(t => Console.WriteLine($"Waited for {t.Result} milliseconds."));
                task.Start(); // fire and forget
            }
    
            PlayMelodyWhileTasksAreRunning();       
        }
        static int NumTasks => Environment.ProcessorCount;
    
        static int DoSomething()
        {
            int milliSeconds = random.Next(4000) + 1000;
            Console.WriteLine($"Waiting for {milliSeconds} milliseconds...");
            Thread.Sleep(milliSeconds);
    
            return milliSeconds; // make available to caller as t.Result
        }
        static Random random = new Random();
    
        static void PlayMelodyWhileTasksAreRunning()
        {
            Console.Beep(587, 200); // D
            Console.Beep(622, 200); // D#
            Console.Beep(659, 200); // E
            Console.Beep(1047, 400); // C
            Console.Beep(659, 200); // E
            Console.Beep(1047, 400); // C
            Console.Beep(659, 200); // E
            Console.Beep(1047, 1200); // C
            Console.Beep(1047, 200); // C
            Console.Beep(1175, 200); // D
            Console.Beep(1245, 200); // D#
            Console.Beep(1319, 200); // E
            Console.Beep(1047, 200); // C
            Console.Beep(1175, 200); // D
            Console.Beep(1319, 400); // E
            Console.Beep(988, 200); // H
            Console.Beep(1175, 400); // D
            Console.Beep(1047, 1600); // C
        }
    }
    

提交回复
热议问题