4

これを試しただけで失敗しました

public MainWindow()
{
    InitializeComponent();
}

private void Button_Click_1(object sender, RoutedEventArgs e)
{

    Task.Factory.StartNew(() =>
    {
        writeFile();
    });

}

TextWriter myWriter = new StreamWriter("deneme.txt");

void writeFile()
{
    for (int k = 0; k < 10000; k++)
    {
        int irTempPara = k;
        Task.Factory.StartNew(() =>
        {
            writeFileForReal(irTempPara);
        });
        System.Threading.Thread.Sleep(10);
    }
}

void writeFileForReal(int srParameter)
{
    for (int k = 0; k < 999999999; k++)
    {
        myWriter.WriteLineAsync(srParameter + "_" + k);
    }
}

c#4.5 WPFアプリです

テキストファイルに行を最も効率的に書き込み、マルチスレッド化するためにどの方法を提案しますか

4

3 に答える 3

16

これはどう?

TextWriter.Synchronized(myWriter).WriteLine("Hello World!!!");
于 2013-03-02T12:25:03.663 に答える
2

単純なTPLの方法を使用するのと同じように使用できますが、次のように設定できます。

    void writeFile()
    {
        for (int k = 0; k < 10000; k++)
        {
            int irTempPara = k;
            Task.Factory.StartNew(() =>
            {
                writeFileForReal(irTempPara);
            }, TaskCreationOptions.LongRunning); // this way you do not need sleep
            // System.Threading.Thread.Sleep(10);
        }
    }

http://coderkarl.wordpress.com/2012/12/13/long-running-tasks-and-threads/

于 2013-03-02T12:40:06.110 に答える
1

マルチスレッドでの同期を Sleep に頼ってはいけません。代わりに、セマフォミューテックスなどの同期メカニズムを使用することを考慮してください。

于 2013-03-02T12:21:31.620 に答える