我很开心与System.Threading.Tasks
一起工作。然而,我看到的许多代码示例看起来像这样:我是否需要处置任务?
Dim lcTask = Task.Factory.StartNew(Sub() DoSomeWork())
Dim lcTaskLong = Task.Factory.StartNew(Sub() DoSomeWork(), TaskCreationOptions.LongRunning)
Task.WaitAll(lcTask, lcTaskLong)
这就是样本的范围。
任务执行IDisposable
,所以显然我应该把它们处理掉,但是如果我只是想“火与忘”呢?
如果我不处理,我会泄漏线程/句柄/内存/业障吗? 我是否在使用任务“错误”? (应该只是使用委托并单独留下任务?)
我可以在ContinueWith()
中处理吗? (这似乎是玩俄罗斯轮盘赌。)
And ... \t \t [CodeAnalysis.SuppressMessage(“Microsoft.Reliability”,“CA2000”,Justification =“http://stackoverflow.com/questions/5985973/do-i-need-to-dispose-of -a-task“)] – GarethOwen 2012-06-18 15:03:18
根据您链接到的Stephen Toub线程判断,我认为当您说”需要[等待句柄]以允许任务继续正常工作并且仅在存在如果没有延续,任务的Dispose方法没有实际效果......“但根据Toub的说法,”Task.Dispose的存在是由于任务可能包装了一个事件句柄......如果你正在做的正在使用continuation,那个事件句柄永远不会被分配,并且Dispose的值会大大减少。“即与上面暗示的相反。 – 2015-09-06 19:14:58