Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在类析构函数中创建新任务是否正常运行?C#_C#_Parallel Processing - Fatal编程技术网

在类析构函数中创建新任务是否正常运行?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我以为那是个破坏者。我现在意识到出了什么问题。哦,现在我意识到发生了什么。谢谢