C# 对于WinRT Metro应用程序,什么等效于Parallel.ForEach
这是MSDN页面中关于Parallel.For的示例代码。我想在WinRT C中做同样的事情:C# 对于WinRT Metro应用程序,什么等效于Parallel.ForEach,c#,multithreading,windows-runtime,C#,Multithreading,Windows Runtime,这是MSDN页面中关于Parallel.For的示例代码。我想在WinRT C中做同样的事情: #区域顺序#u循环 静态孔隙多发性脉管(双[,]matA,双[,]matB,双[,]结果) { int matACols=matA.GetLength(1); int matBCols=matB.GetLength(1); int matARows=matA.GetLength(0); for(int i=0;i
#区域顺序#u循环
静态孔隙多发性脉管(双[,]matA,双[,]matB,双[,]结果)
{
int matACols=matA.GetLength(1);
int matBCols=matB.GetLength(1);
int matARows=matA.GetLength(0);
for(int i=0;i
{
对于(int j=0;j
WinRT Metro的等效整数C#是多少
我是否应该创建一个任务数组并等待该数组的完成?Metro应用程序不应该执行繁重的CPU密集型操作。我不确定应用商店的要求是什么,但是如果你的应用在相当长的一段时间内耗尽了CPU而被拒绝,我也不会感到惊讶 也就是说,Metro确实支持并行异步操作,您可以使用它来执行一些基本的并行处理(如果必须):
静态异步任务多矩阵同步(双[,]matA,双[,]matB,双[,]结果)
{
int matACols=matA.GetLength(1);
int matBCols=matB.GetLength(1);
int matARows=matA.GetLength(0);
var tasks=Enumerable.Range(0,matARows)。选择(i=>
Task.Run(()=>
{
对于(int j=0;j
目前还没有等效的方法。包含Parallel.ForEach
的.NET Framework扩展目前不包含在Win RT.NET配置文件中。如果是这样的话,你的代码就可以工作了。你可以自己写一封。谢谢斯蒂芬,这正是我想要的。
#region Sequential_Loop
static void MultiplyMatricesSequential(double[,] matA, double[,] matB, double[,] result)
{
int matACols = matA.GetLength(1);
int matBCols = matB.GetLength(1);
int matARows = matA.GetLength(0);
for (int i = 0; i < matARows; i++)
{
for (int j = 0; j < matBCols; j++)
{
for (int k = 0; k < matACols; k++)
{
result[i, j] += matA[i, k] * matB[k, j];
}
}
}
}
#endregion
#region Parallel_Loop
static void MultiplyMatricesParallel(double[,] matA, double[,] matB, double[,] result)
{
int matACols = matA.GetLength(1);
int matBCols = matB.GetLength(1);
int matARows = matA.GetLength(0);
// A basic matrix multiplication.
// Parallelize the outer loop to partition the source array by rows.
Parallel.For(0, matARows, i =>
{
for (int j = 0; j < matBCols; j++)
{
// Use a temporary to improve parallel performance.
double temp = 0;
for (int k = 0; k < matACols; k++)
{
temp += matA[i, k] * matB[k, j];
}
result[i, j] = temp;
}
}); // Parallel.For
}
#endregion
static async Task MultiplyMatricesAsync(double[,] matA, double[,] matB, double[,] result)
{
int matACols = matA.GetLength(1);
int matBCols = matB.GetLength(1);
int matARows = matA.GetLength(0);
var tasks = Enumerable.Range(0, matARows).Select(i =>
Task.Run(() =>
{
for (int j = 0; j < matBCols; j++)
{
// Use a temporary to improve parallel performance.
double temp = 0;
for (int k = 0; k < matACols; k++)
{
temp += matA[i, k] * matB[k, j];
}
result[i, j] = temp;
}
}));
await Task.WhenAll(tasks);
}