gpt4 book ai didi

c# - 如何在 C# 中生成工作线程并在主线程中处理它们的输出?

转载 作者:行者123 更新时间:2023-11-30 16:21:09 25 4
gpt4 key购买 nike

我想在 C# 控制台应用程序中实现以下功能:

  1. 在主线程中生成多个工作线程;
  2. 每个工作线程处理数据并定期向主线程发送字符串消息;
  3. 主线程处理消息并等待所有工作线程完成;
  4. 主线程退出。

现在我正在使用 TPL,但我不知道如何将消息从工作线程发送到主线程。谢谢你的帮助!

最佳答案

您可以将生产者/消费者模式与 TPL 一起使用,如 this example on an MSDN blog 中所示。 .

或者,您可以采用老式方法并使用信号,请参阅 AutoResetEvent .

或者,如果您希望在非常的级别上工作,请将 Monitor.PulseMonitor.WaitOne 一起使用(如 here 所示) ).

无论哪种方式,您都在寻找同步,您可以在 here 上阅读它.


其他选项,如果您实际上并不关心更新在哪个线程上运行,则可以将委托(delegate)作为参数并在那里打印更新,à la:

static Task<string> ReadFile(string filename, Action<string> updateStatus)
{

//do stuf synchronously
return Task<string>.Factory.StartNew(() => {
System.Threading.Thread.Sleep(1000);
//do async stuff
updateStatus("update message");
//do other stuff
return "The result";
});
}

public static void Main(string[] args)
{
var getStringTask = ReadFile("File.txt", (update) => {
Console.WriteLine(update)
});
Console.Writeline("Reading file...");
//do other stuff here
//getStringTask.Result will wait if not complete
Console.WriteLine("File contents: {0}", getStringTask.Result);
}

将打印:

Reading file...
update message
File contents: The result

“更新消息”Console.WriteLine 的调用仍将发生在 ThreadPool 线程上,但它仍可能满足您的需要。

关于c# - 如何在 C# 中生成工作线程并在主线程中处理它们的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13485304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com