我需要完成类似的事情(他们告诉我用更多的词语解释更多......)
static MyReturnObject Function1(myObjectA parameter1, myObjectB parameter2) {...}
static void Test()
{
Parallel.For( 0, 10, (index) =>
{
//create parameters y and z
x = Function1(y,z);
// Add x to an array
});
// Find the biggest x.
}
代码有效,但结果不准确。如果我使用“for”而不是“parallel.for”,我会得到准确的结果。
答案 0 :(得分:3)
我尝试按照你的规则执行代码,我确信可以这样做。
请查看我在Winform应用程序中执行的以下代码。
public partial class Form1: Form
{
public Form1()
{
InitializeComponent();
this.Load += new EventHandler(Form1_Load);
}
void Form1_Load(object sender, EventArgs e)
{
Test();
}
static int Function1(int parameter1, int parameter2)
{
return (parameter1 + parameter2);
}
static void Test()
{
int[] nums = Enumerable.Range(0, 1000000).ToArray();
long total = 0;
// Use type parameter to make subtotal a long, not an int
Parallel.For<long>(0, nums.Length, () => 0, (j, loop, subtotal) =>
{
subtotal += (nums[j] + Function1(1,2));
return subtotal;
},
(x) => Interlocked.Add(ref total, x)
);
MessageBox.Show(string.Format("The total is {0}", total));
}
}
答案 1 :(得分:0)
在静态方法中是否可以调用另一个静态方法?
当然!
通过Parallel.For?
为什么不呢?
使用不同的参数?
我不确定我明白你的意思。您是否希望实例化新对象并在Parallel.For的每次迭代中将它们传递给Function1?当然可以!
答案 2 :(得分:0)
是的,有可能,请参阅以下代码:
static void Main(string[] args)
{
Console.WriteLine("\nUsing Parallel.For \n");
Parallel.For(0, 10, i =>
{
Console.WriteLine("i = {0}, thread = {1}", i, Function1());
Thread.Sleep(10);
});
Console.ReadLine();
}
static int Function1()
{
return Thread.CurrentThread.ManagedThreadId;
}