1

私は次のようなことを成し遂げる必要があります(そして彼らは私にたくさんの言葉でもっと説明するように言ってきました...)

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.
}

コードは機能しますが、結果は正確ではありません。「parallel.for」の代わりに「for」を使用すると、正確な結果が得られます。

4

3 に答える 3

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));
        }
    }
于 2012-10-03T08:40:25.320 に答える
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; 
}
于 2012-10-03T08:46:03.693 に答える
0

静的メソッドで別の静的メソッドを呼び出すことは可能ですか?
もちろん!

Parallel.For?経由
なぜだめですか?

異なるパラメータで?
ここであなたが何を意味するのかわかりません。Parallel.Forの反復ごとに、新しいオブジェクトをインスタンス化してFunction1に渡しますか?もちろんできます!

于 2012-10-03T08:40:07.113 に答える