当前位置: 首页>>代码示例>>C#>>正文


C# ConcurrentBag.Distinct方法代码示例

本文整理汇总了C#中ConcurrentBag.Distinct方法的典型用法代码示例。如果您正苦于以下问题:C# ConcurrentBag.Distinct方法的具体用法?C# ConcurrentBag.Distinct怎么用?C# ConcurrentBag.Distinct使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在ConcurrentBag的用法示例。


在下文中一共展示了ConcurrentBag.Distinct方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: should_generate_distinct_handles

        public void should_generate_distinct_handles()
        {
            var list = new ConcurrentBag<string>();
            Parallel.For(0, 10000, i => list.Add(HandleGenerator.Generate(100)));

            Assert.Equal(10000, list.Distinct().Count());
        }
开发者ID:runerys,项目名称:cqrs-journey-code,代码行数:7,代码来源:HandleGeneratorFixture.cs

示例2: Instance_ThreadSafe

        public void Instance_ThreadSafe()
        {

            using (var gate = new Barrier(5))
            {
                var result = new ConcurrentBag<AnyConstructorFinder>();

                Action test = () =>
                {
                    gate.SignalAndWait(20);

                    var instance = AnyConstructorFinder.Instance;

                    Thread.MemoryBarrier();

                    result.Add(instance);
                };

                var cycleState = Parallel.For(0, 200,
                    new ParallelOptions { MaxDegreeOfParallelism = 15 },
                    x => { test(); })
                    ;

                while (!cycleState.IsCompleted) 
                {
                    Thread.Sleep(100);
                }

                Assert.IsTrue(result.All(x => x != null));
                Assert.IsTrue(result.Distinct().Count() == 1);
            }
        }
开发者ID:pgatilov,项目名称:weather.nsu.ru.azure,代码行数:32,代码来源:AnyConstructorFinderTests.cs

示例3: ItHasBeenFixed

        public async Task ItHasBeenFixed()
        {
            var activator = new BuiltinHandlerActivator();

            Using(activator);

            var receivedMessageIds = new ConcurrentBag<string>();

            activator.Handle<string>(async (_, context, message) =>
            {
                receivedMessageIds.Add(context.TransportMessage.Headers[Headers.MessageId]);
            });

            var bus = Configure.With(activator)
                .Transport(t => t.UseInMemoryTransport(new InMemNetwork(), "buggerino"))
                .Start();

            var customHeaders = new Dictionary<string, string>
            {
                {"custom-header", "woohoo"}
            };

            const string repeatedMessage = "hej med dig";

            await bus.SendLocal(repeatedMessage, customHeaders);
            await bus.SendLocal("hej igen med", customHeaders);
            await bus.SendLocal(repeatedMessage, customHeaders);

            await Task.Delay(TimeSpan.FromSeconds(1));

            Assert.That(receivedMessageIds.Distinct().Count(), Is.EqualTo(3), "Expected three unique message IDs - got: {0}", string.Join(", ", receivedMessageIds));
        }
开发者ID:RichieYang,项目名称:Rebus,代码行数:32,代码来源:CustomHeadersAreCloned.cs

示例4: Should_use_all_threads_for_many_tasks

        public void Should_use_all_threads_for_many_tasks()
        {
            var threadIds = new ConcurrentBag<int>();
            var atomicCounter = new AtomicCounter(0);
            Action callback = () =>
            {
                atomicCounter.GetAndIncrement();
                threadIds.Add(Thread.CurrentThread.ManagedThreadId);
            };

            for (var i = 0; i < 1000; i++)
            {
                Factory.StartNew(callback);
            }
            //spin until work is completed
            SpinWait.SpinUntil(() => atomicCounter.Current == 1000, TimeSpan.FromSeconds(1));

            Assert.AreEqual(Pool.Settings.NumThreads, threadIds.Distinct().Count());
        }
开发者ID:kekekeks,项目名称:DedicatedThreadPool,代码行数:19,代码来源:DedicatedThreadPoolTaskSchedulerTests.cs

示例5: Execute

        public int Execute()
        {
            var fileItems = File.ReadAllLines(_file).Select(Int64.Parse).ToArray();
            var hashSet = new HashSet<Int64>(fileItems);
            var result = new ConcurrentBag<Int64>();

            Parallel.ForEach(fileItems, x =>
            {
                var y1 = IntervalStart - x;
                var y2 = IntervalEnd - x;

                for (var y = y1; y <= y2; y++)
                {
                    if (hashSet.Contains(y))
                        result.Add(x + y);
                }
            });

            return result.Distinct().Count();
        }
开发者ID:RobertCPhillips,项目名称:CourseraAlgorithms,代码行数:20,代码来源:TwoSum.cs

示例6: WhenTwoThreadsInitialiseASharedInstanceSimultaneouslyViaChildLifetime_OnlyOneInstanceIsActivated

        public void WhenTwoThreadsInitialiseASharedInstanceSimultaneouslyViaChildLifetime_OnlyOneInstanceIsActivated()
        {
            int activationCount = 0;
            var results = new ConcurrentBag<object>();
            var exceptions = new ConcurrentBag<Exception>();

            var builder = new ContainerBuilder();
            builder.Register(c =>
                {
                    Interlocked.Increment(ref activationCount);
                    Thread.Sleep(500);
                    return new object();
                })
                .SingleInstance();

            var container = builder.Build();

            ThreadStart work = () => {
                 try
                 {
                     var o = container.BeginLifetimeScope().Resolve<object>();
                     results.Add(o);
                 }
                 catch (Exception ex)
                 {
                     exceptions.Add(ex);
                 }
            };

            var t1 = new Thread(work);
            var t2 = new Thread(work);
            t1.Start();
            t2.Start();
            t1.Join();
            t2.Join();

            Assert.Equal(1, activationCount);
            Assert.Empty(exceptions);
            Assert.Equal(1, results.Distinct().Count());
        }
开发者ID:arronchen,项目名称:Autofac,代码行数:40,代码来源:ConcurrentTests.cs

示例7: ObjectPool_should_not_leak_when_used_properly

        public Property ObjectPool_should_not_leak_when_used_properly(Tuple<int, int>[] values)
        {
            var tasks = new List<Task<bool>>();
            var pooledObjects = new ConcurrentBag<MyPooledObject>();
            Func<Tuple<int, int>, MyPooledObject> setPool = tupe =>
            {
                var obj = _pool.Take();
                obj.Num = tupe.Item1;
                obj.Num2 = tupe.Item2;
                return obj;
            };

            Func<MyPooledObject, Tuple<int, int>, bool> freePoolAndAssertReferentialIntegrity = (o, tuple) =>
            {
                var propsEqual = o.Num == tuple.Item1 && o.Num2 == tuple.Item2;
                pooledObjects.Add(o); //add a reference to O
                o.Recycle();
                return propsEqual;
            };

            foreach (var value in values)
            {
                var v = value;
                var task =
                    Task.Run(() => setPool(v)).ContinueWith(t => freePoolAndAssertReferentialIntegrity(t.Result, v));
                tasks.Add(task);
            }
            var results = Task.WhenAll(tasks);
            if (!results.Wait(200))
                return false.Label($"Should not have taken 200ms to process {values.Length} items");

            if (!results.Result.All(x => x))
                return false.Label("None of the objects in the pool should ever be concurrently modified while in use");

            var count = pooledObjects.Distinct().Count();
            return
                (count <= ObjectCount).Label(
                    $"Should not have produced more than {ObjectCount}, but was instead {count}");
        }
开发者ID:helios-io,项目名称:helios,代码行数:39,代码来源:ObjectPoolSpec.cs

示例8: Should_process_workload_across_exactly_DedicatedThreadPoolSettings_NumThreads

        public void Should_process_workload_across_exactly_DedicatedThreadPoolSettings_NumThreads()
        {
            var numThreads = Environment.ProcessorCount;
            var threadIds = new ConcurrentBag<int>();
            var atomicCounter = new AtomicCounter(0);
            Action callback = () =>
            {
                atomicCounter.GetAndIncrement();
                threadIds.Add(Thread.CurrentThread.ManagedThreadId);
            };
            using (var threadPool = new DedicatedThreadPool(new DedicatedThreadPoolSettings(numThreads)))
            {
                for (var i = 0; i < 1000; i++)
                {
                    threadPool.QueueUserWorkItem(callback);
                }
                //spin until work is completed
                SpinWait.SpinUntil(() => atomicCounter.Current == 1000, TimeSpan.FromSeconds(1));
            }

            Assert.AreEqual(numThreads, threadIds.Distinct().Count());
        }
开发者ID:kekekeks,项目名称:DedicatedThreadPool,代码行数:22,代码来源:DedicatedThreadPoolTests.cs

示例9: TestSaveUpdatesAutoIncrementingField

 public void TestSaveUpdatesAutoIncrementingField()
 {
     //---------------Set up test pack-------------------
     ClassDef.ClassDefs.Clear();
     TestAutoInc.LoadClassDefWithAutoIncrementingID();
     var newIds = new ConcurrentBag<int?>();
     //---------------Execute Test ----------------------
     Parallel.For(0, 1000, i => {
                                    //---------------Set up test pack-------------------
                                    var bo = new TestAutoInc();
                                    bo.SetPropertyValue("testfield", "testing 123");
                                    //---------------Assert Precondition----------------
                                    Assert.IsFalse(bo.TestAutoIncID.HasValue);
                                    //---------------Execute Test ----------------------
                                    bo.Save();
                                    //---------------Test Result -----------------------
                                    newIds.Add(bo.TestAutoIncID);
     });
     //---------------Test Result -----------------------
     Assert.IsTrue(newIds.All(i => i.HasValue));
     Assert.IsTrue(newIds.All(i => i > 0));
     Assert.That(newIds.Distinct().Count(), Is.EqualTo(1000), "Every generated ID must be unique");
 }
开发者ID:Chillisoft,项目名称:habanero,代码行数:23,代码来源:TestBusinessObject_Concurrency.cs

示例10: World_should_not_end_if_exception_thrown_in_user_callback

        public void World_should_not_end_if_exception_thrown_in_user_callback()
        {
            var numThreads = 3;
            var threadIds = new ConcurrentBag<int>();
            Action badCallback = () =>
            {
                threadIds.Add(Thread.CurrentThread.ManagedThreadId);
                throw new Exception("DEATH TO THIS THREAD I SAY!");
            };
            Action goodCallback = () =>
            {
                threadIds.Add(Thread.CurrentThread.ManagedThreadId);
            };

            using (var threadPool = new DedicatedThreadPool(new DedicatedThreadPoolSettings(numThreads, TimeSpan.FromSeconds(1))))
            {
                for (var i = 0; i < numThreads; i++)
                {
                    threadPool.QueueUserWorkItem(badCallback);
                    Thread.Sleep(20);
                }

                //sanity check
                Assert.AreEqual(numThreads, threadIds.Distinct().Count());

                //run the job again. Should get 3 more managed thread IDs
                for (var i = 0; i < numThreads*10; i++)
                {
                    threadPool.QueueUserWorkItem(goodCallback);
                    Thread.Sleep(20);
                }
            }

            // half of thread IDs should belong to failed threads, other half to successful ones
            Assert.AreEqual(numThreads * 2, threadIds.Distinct().Count());
        }
开发者ID:kekekeks,项目名称:DedicatedThreadPool,代码行数:36,代码来源:DedicatedThreadPoolTests.cs

示例11: button1_Click

        private void button1_Click(object sender, EventArgs e)
        {
            var cnt = tbCount.Text.AsInt();

              var bag = new ConcurrentBag<FID>();

              if (chkParallel.Checked)
               Parallel.For(0,cnt,(i)=>
               {
              bag.Add( FID.Generate() );
               });
              else
               for(var i=0; i<cnt;i++)
              bag.Add( FID.Generate() );

              var sb = new StringBuilder();
              var c=0;
              foreach(var id in bag)
              {
            sb.AppendLine( "{0}:    {1}  ->  {2}".Args(c, id.ID, id) );
            c++;
            if (c>10000)
            {
              sb.AppendLine("......more......");
              break;
            }
              }

              //Uncomment to cause duplicates
              //var v =bag.FirstOrDefault();
              //bag.Add(v);
              //bag.Add(v);//duplicate

              if (bag.Count==bag.Distinct().Count())
            sb.Insert(0, "No Duplicates in the set of {0:n2}\r\n".Args(bag.Count));
              else
            sb.Insert(0, "DUPLICATES!!!!!!!!!!!!! in the set of {0:n2}\r\n\r\n\r\n".Args(bag.Count));

              tbDump.Text = sb.ToString();
        }
开发者ID:vlapchenko,项目名称:nfx,代码行数:40,代码来源:FIDForm.cs

示例12: UseSameThreadForAllRequests

        public void UseSameThreadForAllRequests()
        {
            var bag = new ConcurrentBag<int>();

            using (var server = new HttpServer("http://*:1234/"))
            {
                server.RAW("")
                      .Subscribe(ctx =>
                                     {
                                         bag.Add(Thread.CurrentThread.ManagedThreadId);
                                         ctx.Respond(200);
                                     });
                Parallel.For(1, 1000, i => Browser.ExecuteGet("http://localhost:1234/"));

                bag.Distinct().Count()
                   .Should("The default scheduler should be Event Loop, and all subscriber run in same thread")
                   .Be.EqualTo(1);

            }
        }
开发者ID:Amsoft-Systems,项目名称:Anna,代码行数:20,代码来源:ServerTests.cs

示例13: ProcessPics

        private static void ProcessPics(Task t, ConcurrentBag<Uri> picsToGet)
        {
            if (t.Exception != null)
            {
                throw t.Exception.Flatten();
            }
            string[] existingFiles = Directory.GetFiles(Settings.Default.FacebookUsersSettings.PhotoDirectory);
            IEnumerable<string> filesToDelete =
                existingFiles.Except(
                    picsToGet.Distinct().Select(
                        x =>
                        Path.Combine(Settings.Default.FacebookUsersSettings.PhotoDirectory,
                                     Path.GetFileName(x.AbsoluteUri))));

            try
            {
                foreach (string file in filesToDelete)
                {
                    File.Delete(file);
                }
            }
            catch
            {
            }

            //delete files not in list
            IEnumerable<Uri> filesToDownload =
                picsToGet.Distinct().Where(
                    x =>
                    !existingFiles.Contains(Path.Combine(Settings.Default.FacebookUsersSettings.PhotoDirectory,
                                                         Path.GetFileName(x.AbsoluteUri))));

            Parallel.ForEach(filesToDownload, DownloadFiles);
        }
开发者ID:scottccoates,项目名称:SoPho,代码行数:34,代码来源:MainWindow.xaml.cs

示例14: GetPeopleTitles

        async static Task<string[]> GetPeopleTitles(string listTitle, List<string> previousLists = null, int level = 0)
        {
            if ((previousLists != null && previousLists.Contains(listTitle)) || level >= 2)
                return new string[0];
            Console.WriteLine("Getting {0}.", listTitle);
            try
            {
                string peoplePage = await Utilities.GetPage(listTitle);
                if (previousLists == null)
                    previousLists = new List<string>();
                previousLists.Add(listTitle);

                var peopleTitles = new List<string>();
                Regex personRegex = new Regex(@"(?<=\*[^\[]*\[\[)[^\[\]\|]+");

                var matches = personRegex.Matches(peoplePage);
                foreach (Match match in matches)
                {
                    if (!match.Value.Contains("Category") && !match.Value.Contains("List") && !match.Value.Contains(" people") && !match.Value.Contains(':'))
                    {
                        peopleTitles.Add(match.Value.Replace(' ', '_'));
                    }
                }

                // check for other people lists in this list
                Regex listRegex = new Regex(@"(?<=\[\[)List of[^\]]+");
                var listMatches = listRegex.Matches(peoplePage);
                if (listMatches.Count > 0)
                {
                    var listNames = new List<string>();
                    foreach (Match match in listMatches)
                    {
                        listNames.Add(match.Value);
                    }
                    var titles = new ConcurrentBag<string>();
                    Parallel.ForEach(listNames, async name =>
                    {
                        if (!previousLists.Contains(name))
                        {
                            var nestedTitles = await GetPeopleTitles(name, previousLists, level + 1);
                            foreach (var title in nestedTitles)
                            {
                                titles.Add(title);
                            }
                        }
                    });
                    peopleTitles.AddRange(titles.Distinct());
                }

                return peopleTitles.ToArray();
            }
            catch
            {
                return new string[0];
            }

        }
开发者ID:RichTeaMan,项目名称:DeathClock,代码行数:57,代码来源:Program.cs

示例15: AttentionSpiderParallelExecute

        /// <summary>
        /// 并行获取关注的UID列表
        /// </summary>
        /// <param name="uid"></param>
        /// <returns></returns>
        public static List<long> AttentionSpiderParallelExecute(string uid)
        {
            ConcurrentBag<long> concurrentBag = new ConcurrentBag<long>();

            var weiboUser = AnalyseCnPage.AnalysisUserHome(GetWeiboUser(uid));
            var totalPage = weiboUser.FriendsCount / 10 + 1;

            Action<int> action = page =>
            {
                //对于网络错误进行重试
                for (int i = 0; i < 3; i++)
                {
                    var pageStr = GetFollowers(weiboUser, page);
                    var pageList = AnalyseCnPage.AnalysisFollowers(pageStr);
                    if (pageList != null)
                    {
                        foreach (long id in pageList)
                        {
                            concurrentBag.Add(id);
                        }
                        break;
                    }
                    CNHttpWorkLogger.Info("用户{0}第{1}页关注获取失败", uid, page);
                }
            };

            ParallelOptions po = new ParallelOptions { MaxDegreeOfParallelism = 32 };
            Parallel.For(1, totalPage, po, action);
            return concurrentBag.Distinct().ToList();
        }
开发者ID:SaintLoong,项目名称:Framework,代码行数:35,代码来源:CNHttpWork.cs


注:本文中的ConcurrentBag.Distinct方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。