在类析构函数中创建新任务是否正常运行?C#
我有一节课是这样安排的:在类析构函数中创建新任务是否正常运行?C#,c#,parallel-processing,C#,Parallel Processing,我有一节课是这样安排的: public class NetworkServer { private BlockingCollection<byte[]> receivingQueue; public NetworkServer(IPEndPoint endpoint, int packetsize) { receivingQueue = new BlockingCollection<byte[]>(new ConcurrentQu
public class NetworkServer
{
private BlockingCollection<byte[]> receivingQueue;
public NetworkServer(IPEndPoint endpoint, int packetsize)
{
receivingQueue = new BlockingCollection<byte[]>(new ConcurrentQueue<byte[]>());
// Do some other stuff here
}
public ~NetworkServer()
{
// Do some stuff here
Task.Factory.StartNew(() => Parallel.ForEach<byte[]>(receivingQueue, item => SomeOtherClass.ParseItem(item)));
}
}
公共类网络服务器
{
私有阻塞收集接收队列;
公用网络服务器(IPEndPoint端点,int packetsize)
{
receivingQueue=new BlockingCollection(new ConcurrentQueue());
//在这里做些别的事情
}
public~NetworkServer()
{
//在这里做些事情
Task.Factory.StartNew(()=>Parallel.ForEach(receivingQueue,item=>SomeOtherClass.ParseItem(item));
}
}
使用析构函数中的Task.Factory.StartNew
,我想知道这是否会创建一个新线程,该线程将继续运行,即使NetworkServer
的实例可能被垃圾收集。如果这不起作用,那么在新线程上解析这些项的最佳方式是什么/在对NetworkServer
实例进行GC之后解析这些项。另外,ParseItem
将位于不同的类中,以防不清楚
谢谢。那太糟糕了!别这样!对于终结器将从中运行的上下文,您一点也不了解。如果你认为你需要做这类事情,那就考虑修改你的设计——它有代码臭味。从技术上讲,它会的 但是,这不是一个析构函数。这是终结器
如果您有一台具有16GB RAM的机器,那么第一个终结器可能会在启动数小时后运行。那绝对是个糟糕的设计。你为什么要这么做?这真是自找麻烦…@carlosfigueira我以为那是个破坏者。我现在意识到出了什么问题。哦,现在我意识到发生了什么。谢谢