【发布时间】:2014-07-01 07:39:03
【问题描述】:
我有一个并行任务,将一些数据写入文件
using (var lFileStream = File.Open(aDestinationFile, shouldResume ? FileMode.Append : FileMode.Create, FileAccess.Write))
{
try
{
while ((lCount = lDownloadStream.Read(lBuf, 0, lBuf.Length)) > 0)
{
lFileStream.Write(lBuf, 0, lCount);
}
}
finally
{
lFileStream.Close();
}
}
我通过以下方式启动任务:
Task.Factory.StartNew(() =>
{
try
{
myMethod();
}
catch (Exception ex)
{
Log.Exc(ex);
}
}
, _resetEvent.Token);
在某些情况下我必须终止任务:
_resetEvent.Cancel(false);
try
{
_task.Dispose();
}
catch
{
}
任务停止后,我开始了一个新任务,但是当我尝试访问已使用的文件时,我得到了:
进程无法访问文件'bla-bla',因为它正在被使用 由另一个进程。
我怎样才能正确地“杀死”任务?
【问题讨论】:
-
您不需要您的 try-finaly 阻止从您的
using块调用的Dispose()为您调用Close()。 -
@ScottChamberlain 更正您所说的:
using不会调用Close,它将调用Dispose,而后者又会调用Close。 -
@SriramSakthivel 这就是我想说的(谢谢你让它不那么复杂)
标签: c# file-io task cancellation