是否有任何版本的.NET具有可通过代码访问的Random.shared属性?

lsmepo6l  于 2023-01-22  发布在  .NET
关注(0)|答案(2)|浏览(92)

我正在使用.net源代码浏览器here,查找Random类,发现它有一个Shared属性,可以访问线程安全实现。我需要类似的东西,所以我尝试在代码中访问它,但Random类似乎没有任何静态属性。而且我找不到任何关于MSDN docs的这样一个属性的提及(在这个源代码之外)。
我也不知道www.example.com是否source.dot.net指向.Net的官方版本(如果指向,是什么版本),但是生成它的工具也用于referencesource.microsoft.com
在任何版本的.Net中,System.Random是否都有Shared属性可用?www.example.com是否source.dot.net是.net源代码的合法引用?

dl5txlt9

dl5txlt91#

Random.Shared最早出现在**.NET 6中**

x0fgdtte

x0fgdtte2#

提供可从任何线程并发使用的线程安全Random示例。
下面是在简单的并行运算中使用它的一种很酷的方法!

var random = Random.Shared;

async IAsyncEnumerable<int[]> SimStreamAsync(int value = 0)
{
  while (true)
  {
    await Task.Delay(random.Next(5, 20));
    yield return new int[]
      { ++value, ++value, ++value, ++value, ++value };
  }
}

await Parallel.ForEachAsync(SimStreamAsync(),
  new ParallelOptions { MaxDegreeOfParallelism = 10 }, process);

async ValueTask process(int[] numbers, CancellationToken token)
{
  await Task.Delay(random.Next(500, 1000));
  Console.WriteLine(numbers.Last());
}

相关问题