多个方法的TPL调用Console.Write问题

时间:2013-03-13 21:32:49

标签: c# .net task-parallel-library console-application

如果我使用TPL我在Parse中遇到问题。方法我确实使用Console.Write来构建一些Line,但有时候一个是快速写入其他方法行。我如何锁定或有更好的方法?

Parallel.Invoke(
  () => insertedOne = Lib.ParseOne(list),
  () => insertedTwo = Lib.ParseTwo(list),
  () => insertedThree = Lib.ParseThree(list));

Parse ..方法的例子。

public static int ParseOne(string[] _list) {
    Console.Write("blabla");
    Console.Write("blabla");
    return 0;
}
public static int ParseTwo(string[] _list) {
    Console.Write("hahahah");
    Console.Write("hahahah");
    return 0;
}
public static int ParseThree(string[] _list) {
    Console.Write("egegege");
    Console.Write("egegege");
    return 0;
}

2 个答案:

答案 0 :(得分:2)

能够将blablahahahahegegege打印为单个实体(不可分割) 你可以把你的方法写成:

public static int ParseThree(string[] _list)
{
    lock (Console.Out)
    {
        Console.Write("egegege");
        Console.Write("egegege");
    }
    return 0;
}

答案 1 :(得分:1)

为什么不一个接一个地在一个线程中运行所有任务?

 System.Threading.Tasks.Task.Factory.StartNew(()=>
 {
    insertedOne = Lib.ParseOne(list);
    insertedTwo = Lib.ParseTwo(list);
    insertedThree = Lib.ParseThree(list);
 });

这样你就不会有那么多的竞争条件。