Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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
.net 我是否需要处理任务?_.net_Task Parallel Library_Dispose - Fatal编程技术网

.net 我是否需要处理任务?

.net 我是否需要处理任务?,.net,task-parallel-library,dispose,.net,Task Parallel Library,Dispose,我在系统.线程.任务中工作得很开心。但是,我看到的许多代码示例如下所示: Dim lcTask = Task.Factory.StartNew(Sub() DoSomeWork()) Dim lcTaskLong = Task.Factory.StartNew(Sub() DoSomeWork(), TaskCreationOptions.LongRunning) Task.WaitAll(lcTask, lcTaskLong) 这就是样本的范围。 任务实现了IDisposableIDispo

我在
系统.线程.任务
中工作得很开心。但是,我看到的许多代码示例如下所示:

Dim lcTask = Task.Factory.StartNew(Sub() DoSomeWork())
Dim lcTaskLong = Task.Factory.StartNew(Sub() DoSomeWork(), TaskCreationOptions.LongRunning)
Task.WaitAll(lcTask, lcTaskLong)
这就是样本的范围。
任务实现了IDisposable
IDisposable
,所以很明显我应该处理它们,但是如果我只是想“开火然后忘记”呢

如果我不处理,我会泄漏线程/句柄/内存/业力吗? 我是否使用了“错误”的任务?(应该只使用一个代理,而不处理任务?)


我是否可以在
ContinueWith()中处置?(这好像在玩俄罗斯轮盘赌。)

虽然通常的经验法则是在所有
IDisposable
实现上总是调用
Dispose()
,但
Task
Task
通常是最好让终结器处理这一问题的一种情况

任务实现IDisposable的原因主要是由于内部WaitHandle。这是允许任务延续正常工作所必需的,并且仅在任务上有延续时使用。如果没有continuation,任务的Dispose方法就没有实际效果——因此在本例中,它不是必需的

也就是说,在大多数有任务延续的情况下,通常很难以允许正确调用Dispose()的方式编写代码。使用语句通常不适用于任务实例,因为任务调用本质上通常是异步的。很容易过早地处理任务,尤其是在使用using语句时

在您的情况下,如果保留对任务的引用并正确调用Dispose()相对简单,我会这样做。然而,如果这将导致您的逻辑变得更加复杂,我通常会假装任务不可
IDisposable
,并允许在任务的终结器中清理它


要了解更多详细信息,我建议Stephen Toub在其中详细描述任务实现IDisposable的原因,并提供与我上述建议类似的指导。

和…[CodeAnalysis.SuppressMessage(“Microsoft.Reliability”,“CA2000”,Justification=”从您链接到的Stephen Toub线程判断,我认为您说的话是错误的。”[等待句柄]是允许任务继续正常工作所必需的,并且仅在任务上有继续时使用。如果没有继续,则任务的Dispose方法没有实际效果……”但根据ToubTask.Dispose的存在是因为Task可能会包装事件句柄…如果您所做的一切都是使用continuations,那么将永远不会分配该事件句柄,并且Dispose的值将大大降低。”即,与您上面的暗示相反。此处的有用分析: