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


C# Func.ExecuteMultithread方法代码示例

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


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

示例1: GetOrAddUniqueValueKeyIsThreadSafe

        public void GetOrAddUniqueValueKeyIsThreadSafe()
        {
            var count = 1000;
            var service = new InMemoryUniqueService();
            var data = Enumerable.Range(0, count).Select(i => Tuple.Create($"val-{i:d4}", new TestId(Guid.NewGuid().ToString("N")))).ToArray();

            var threadWork = new Func<int, Task<TestId[]>>(async (threadNr) =>
            {
                var res = new TestId[count];
                foreach (var i in Enumerable.Range(0, count).OrderBy(i => Guid.NewGuid()))
                {
                    res[i] = await service.GetOrAddUniqueValueKey("single-group", data[i].Item1, data[i].Item2);
                    //Console.WriteLine($"Key for value {data[i].Item1} is {res[i]} by thread {threadNr:d3}.");
                    await Task.Delay(i % 10);
                }
                return res;
            });
            var results = threadWork.ExecuteMultithread();

            for (int threadIndex = 0; threadIndex < results.Length; threadIndex++)
            {
                var threadResults = results[threadIndex];
                for (int result = 0; result < count; result++)
                {
                    var expected = data[result].Item2;
                    var actual = threadResults[result];
                    Assert.AreEqual(expected, actual);
                }
            }
        }
开发者ID:alcancepl,项目名称:ddd-es,代码行数:30,代码来源:InMemoryUniqueServiceTests.cs

示例2: TryRemoveUniqueValueKeyIsThreadSafe

        public void TryRemoveUniqueValueKeyIsThreadSafe()
        {
            var count = 1000;
            var service = new InMemoryUniqueService();
            var data = Enumerable.Range(0, count).Select(i => new Tuple<string, TestId>($"val-{i:d4}", new TestId(Guid.NewGuid().ToString("N")))).ToArray();

            Task.WaitAll(data.Select(d => service.GetOrAddUniqueValueKey("single-group", d.Item1, d.Item2)).ToArray());

            var threadWork = new Func<int, Task<bool[]>>(async (threadNr) =>
            {
                var res = new bool[count];
                foreach (var i in Enumerable.Range(0, count).OrderBy(i => Guid.NewGuid()))
                {
                    res[i] = service.TryRemoveUniqueValueKey("single-group", data[i].Item1, data[i].Item2).Result;
                    //Console.WriteLine($"Value index {i:d4} removeal is {res[i]} by thread {threadNr:d3}.");
                    await Task.Delay(i % 10);
                }
                return res;
            });
            var results = threadWork.ExecuteMultithread();

            for (int result = 0; result < count; result++)
            {
                var removedByCount = 0;
                for (int threadIndex = 0; threadIndex < results.Length; threadIndex++)
                {
                    var removed = results[threadIndex][result];
                    if (removed)
                    {
                        //Console.WriteLine($"Value index {result:d4} removed by thread {threadIndex:d3}.");
                        removedByCount++;
                    }
                }
                Assert.AreEqual(1, removedByCount);
            }
        }
开发者ID:alcancepl,项目名称:ddd-es,代码行数:36,代码来源:InMemoryUniqueServiceTests.cs


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