0

如果我使用 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;
}
4

2 回答 2

2

为了能够将您blabla的 s、hahahahs 和egegeges 打印为单个实体(不可分割),您可以将方法编写为:

public static int ParseThree(string[] _list)
{
    lock (Console.Out)
    {
        Console.Write("egegege");
        Console.Write("egegege");
    }
    return 0;
}
于 2013-03-13T22:12:32.520 回答
1

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

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

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

于 2013-03-13T21:48:14.060 回答