Rx extensions: Where is Parallel.ForEach?

前端 未结 2 1718
隐瞒了意图╮
隐瞒了意图╮ 2020-12-31 17:39

I have a piece of code which is using Parallel.ForEach, probably based on a old version of Rx extensions or the Tasks Parallel Library. I installed a current ve

2条回答
  •  天命终不由人
    2020-12-31 18:28

    Here's a simple replacement:

    class Parallel
    {
        public static void ForEach(IEnumerable source, Action body)
        {
            if (source == null)
            {
                throw new ArgumentNullException("source");
            }
            if (body == null)
            {
                throw new ArgumentNullException("body");
            }
            var items = new List(source);
            var countdown = new CountdownEvent(items.Count);
            WaitCallback callback = state =>
            {
                try
                {
                    body((T)state);
                }
                finally
                {
                    countdown.Signal();
                }
            };
            foreach (var item in items)
            {
                ThreadPool.QueueUserWorkItem(callback, item);
            }
            countdown.Wait();
        }
    }
    

提交回复
热议问题