更好地控制线程何时在 AsParallel 中启动

Getting better control on when thread starts in AsParallel

下面的代码将在单独的线程中运行 ChanceOfWinningMillionDollarJackpot,这非常酷。然而,这些线程会立即开始工作,而对于常规的 C# Thread 类,您可以使用 Thread.Start 方法控制工作何时开始。无论如何,在使用 AsParallel 设置并行查询时我可以获得相同的控制吗?

static void Main(string[] args)
{
     Task<double>[] e = Enumerable.Range(1, 10).AsParallel().Select(n => ChanceOfWinningMillionDollarJackpot(n)).ToArray();
}

private static Task<double> ChanceOfWinningMillionDollarJackpot(int n)
{
    //whatever
}

您需要 return 列表作为 IEnumerable。然后,只有当您查询可枚举时,代码才会真正执行。

var enumerable = Enumerable.Range(1, 10).AsParallel()
    .Select(n => ChanceOfWinningMillionDollarJackpot(n)).AsEnumerable();

var list = enumerable.ToList();