我在看MSDN时,他说调用BlockingCollection.TryAdd()添加重复项会引发异常,会引发 InvalidOperationException。
它这个重复项指的时什么东西?
是指重复的数据吗? 可是我用下面的代码 往队列中添加3个同样的数据,并没有引发异常。
求各位大佬指点,谢谢!
以下是代码:
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace ParallelConsole
{
    class Program
    {
         static BlockingCollection<int> blocking = new BlockingCollection<int>(10);
         static void Main(string[] args)
        {
          try
            {
                for (int i = 0; i < 3; i++)
                {
                    blocking.TryAdd(1);  //添加3次  1,而不是i;
                    Console.WriteLine("数据添加成功,当前blocing中有{0}数据",  blocking.Count);
                    
                }
               
            }
            catch (InvalidOperationException ex)
            {
                Console.WriteLine("捕捉到异常:" + ex.Message);
            }            Console.ReadKey();
         }
   }
}

解决方案 »

  1.   

    bool success = blocking.TryAdd(1);
    这个不会报异常,而是返回false
      

  2.   

    我试了下,改动了for:                for (int i = 0; i < 3; i++)
                    {
                        if (blocking.TryAdd(1) == false) //添加3次  1,而不是i;
                        {
                            Console.WriteLine("数据发生重复,当前blocking中有{0}", blocking.Count);
                        }
                        else
                        {
                            Console.WriteLine("数据添加成功---,当前blocing中有{0}数据", blocking.Count);                    }
                    }但是并没有返回false,而是返回true。
    说明它并没有排除重复项,那这个重复项到底是指什么?
      

  3.   

    BlockingCollection<T> 应该是允许添加重复项 ,InvalidOperationException根本就不会抛出但是添加失败的时候会返回false (多线程环境下同时操作有可能)