C# 多线程服务工程问题
我正试图利用.NET4.5新的线程功能来设计一个系统来更新内存中的对象列表 多年前我在Java中使用多线程技术,我担心我的技能会停滞不前,尤其是在.NET领域 基本上,我已经编写了一个提要抽象类,并且为我的每个线程从中继承。线程类本身很简单,运行良好 这些类中的每一个都会无休止地运行,直到事件发生并更新列表为止 因此,第一个问题是,在这些线程运行时,如何保持父线程的活动状态?我已通过在当前带有console.read()的dev console应用程序中写入此内容来防止这种竞争条件 其次,我想建立一个列表对象的存储库,我可以从父线程访问这些对象。如何从子线程更新这些列表,并将它们公开给另一个系统?试图避免使用SQL。共享内存 我希望我已经说清楚了。我希望有这样的事情: 除此之外,我们需要外部类的适应性,当然,我们需要以某种方式公开这些列表。您可以在一段时间内运行“父”线程,并使用一些标志来停止它:C# 多线程服务工程问题,c#,.net,multithreading,C#,.net,Multithreading,我正试图利用.NET4.5新的线程功能来设计一个系统来更新内存中的对象列表 多年前我在Java中使用多线程技术,我担心我的技能会停滞不前,尤其是在.NET领域 基本上,我已经编写了一个提要抽象类,并且为我的每个线程从中继承。线程类本身很简单,运行良好 这些类中的每一个都会无休止地运行,直到事件发生并更新列表为止 因此,第一个问题是,在这些线程运行时,如何保持父线程的活动状态?我已通过在当前带有console.read()的dev console应用程序中写入此内容来防止这种竞争条件 其次,我想建
while(flag){
//run the thread
}
可以将公共列表作为某个类的属性公开以保存数据。记住在多线程代码中锁定访问。如果“父”线程在处理过程中应该等待,它可以简单地等待对异步方法的调用 如果它必须等待特定事件,您可以使用一个信令对象,例如
如果线程在等待时必须“执行”任务,则可以检查结果或进度的可用性:如果使用任务,则可以使用等待任务完成。默认情况下,Tasks和async/await使用您系统的任务,因此我不会在这里放置任何运行时间相对较短的任务 如果您使用的是
System.Threading.Thread
(我更喜欢将这些用于长时间运行的线程),请在此处查看接受的答案:
如果可以获取成批数据,那么可以公开允许使用自托管Web API或类似工具访问共享对象的服务。如果您喜欢二进制通信,WCF和远程处理也是可选的
如果您有许多小事务,则可以选择共享内存、保持活动的TCP连接或UDP。也许您可以使用(这不是传统的队列)它们提供的C#绑定
要同时访问列表,请先查看System.Collections.concurrent中的类,然后再实现自己的锁定 查看带有超时的
AutoResetEvent
,而不是flag+Thread.Sleep。