本文整理汇总了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);
}
}
}
示例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);
}
}