stevo_ said:

YAY! just what I wanted.. Expressionless

I;m preparing samples (just like futures .NET 4.0)

I can nave you a boost //So i'm currently working on a Pi calculation example.

In a lighting sample, you can take use of parallelism in programs like below (working sudoku generator):

 

    public abstract class PluginBaseWorkItem<T>

    {

        private static object _sync = new object();

        private T _item;

        public T Item { get { return _item; } }

        public void Run()

        {

            List<WaitHandle> _waitHandles = new List<WaitHandle>();

            for (int i = 0; i < TaskCount; i++)

            {

                _waitHandles.Add(new AutoResetEvent(false));

            }

            for (int i = 0; i < TaskCount; i++)

            {

                ThreadPool.QueueUserWorkItem(new WaitCallback(ProcessHandle), _waitHandles[i]);

            }

            WaitHandle.WaitAll(_waitHandles.ToArray());

        }

        protected abstract void ProcessItem();

        protected void SetValue(T item)

        {

            _item = item;

        }

        protected T GetValue()

        {

            return _item;

        }

        protected virtual int TaskCount { get { return Environment.ProcessorCount; } }

        private void Process()

        {

            ProcessItem();

        }

        private void ProcessHandle(object sync)

        {

            AutoResetEvent waitHandle = (AutoResetEvent)sync;

            Process();

            waitHandle.Set();

        }

    }

 

         private class WorkItem : PluginBaseWorkItem<Puzzle>

        {

            protected override void ProcessItem()

            {

                DlxEngine engine = new DlxEngine();

                Puzzle value = engine.Generate(20);

                lock (this)

                {

                    Puzzle item = GetValue();

                    if (item == null || value.Rating > item.Rating)

                    {

                        SetValue(value);

                    }

                }

            }

        }

 

        public static IPuzzle Create()

        {

            WorkItem workItem = new WorkItem();

            workItem.Run();

            IPuzzle puzzle = workItem.Item;

            return Create(puzzle.Text, puzzle.Seed);

        }