进程无法访问文件异常

时间:2016-01-11 05:54:58

标签: c# multithreading system.io.file

通常猜测这种异常的原因是什么。但让我解释一下我面临的确切情况。请查看我的代码块的概述。

 Task.Factory.StartNew(()=> Method1());

 private void Method1()
 {

     //A process which loads the file and uploads it to server. If the file was large, it will take some amount of time.
     using (var fileStream = System.IO.File.OpenRead(filePath))
        {
           //Upload file
        }

    //Once uploads deletes from local.
    File.Delete(path);
 }

在上传文件之前,调用了删除方法,因为我使用了单独的任务。所以我得到了进程无法访问文件的异常。

上传结束后我应删除该文件。需要一些建议。

1 个答案:

答案 0 :(得分:1)

TPL继续

你也可以在这里使用contnuewith,因为

  1. 您想要更新文件
  2. 更新完成后,您要删除文件
  3. 比你能做到的

    Task t =Task.Factory.StartNew(()=> Method1());//remove delete file form method one 
    t.ContinueWith((as)=> {File.Delete(path);} );
    

    上面的代码可能存在语法错误,所以请在visual studio中解决它

    Singling Construct

    当你正在更新并删除我建议的不同thred上的文件时 利用信号构造

    public class test 
    {
     private static AutoResetEvent event_2 = new AutoResetEvent(false);
    
     public void uploadfile()
     {
       ///do file updating 
       //than give signale 
       event_2.set();
     }
    
     public void deletefile()
     {
        event_2.WaitOne();
        //delete file 
     }
    }
    

    它似乎没有线程问题,它看起来像你要删除的文件不存在因此它更好的检查文件是否存在文件退出方法

    if (File.Exists(path))
    {
     File.Delete(path);
    }