A Ovest Di Paperino

Welcome to the dark side.
ARCHIVED

Lambdas

Lo sapevo che prima o poi sarei diventato addicted:

        public delegate void AsyncVoidMethodHelper();
 
        static void RunAsync(int timeout, AsyncVoidMethodHelper method)
        {
            IAsyncResult result = method.BeginInvoke(null, null);
            result.AsyncWaitHandle.WaitOne(timeout);
        }
 
        static void Main(string[] args)
        {
            string result = String.Empty;
 
            RunAsync(50, delegate
            {
                Thread.Sleep(10);
                Console.WriteLine("you should see this");
                result = "a";
            });
 
            RunAsync(50, delegate
            {
                Thread.Sleep(100);
                Console.WriteLine("you should _NOT_ see this");
                result = "b";
            });
 
            Console.WriteLine("result should be 'a'. => '{0}'", result);
 
 
        }

Con solo 2 righe di codice si può eseguire qualsiasi blocco in maniera asincrona e con un timeout predefinito. Ma la fantasia può essere lasciata libera di correre come un cavallo. Fichissima la possibilità di giocare con lo scope delle variabili (assegnazione di result). Stilisticamente perfetto: sintetico per chi lo scrive, doloroso per chi lo deve mantenere.

-quack