1

所以我有一堂课是这样安排的:

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)));
    }
}

Task.Factory.StartNew析构函数中,我想知道这是否会创建一个新线程,即使实例NetworkServer可能被垃圾收集,也会继续运行。如果这不起作用,那么在新线程上解析每个项目/在 GC 实例之后解析项目的最佳方法NetworkServer是什么。此外,ParseItem如果不清楚,将在不同的班级。

谢谢。

4

2 回答 2

3

从技术上讲,它会的。

但是,这不是析构函数。那是终结者。

如果您有一台具有 16GB RAM 的机器,则第一个终结器可能会在启动数小时后运行。这绝对是一个糟糕的设计。

于 2012-07-12T08:09:11.483 回答
-1

这真是太可怕了!不要这样做!您对终结器将运行的上下文一无所知。如果您认为需要做这种事情,请考虑修复您的设计 - 它有代码恶臭。

于 2012-07-12T08:07:58.390 回答