2016-11-22 3 views
0

私は約5000のファイルをFTPに置いているので、FTPを使用してファイルをダウンロードしてからファイルを解凍し、最後に処理してOracleデータベースにプッシュします。データベースがすべて正常に機能するようにプッシュすると、なぜ処理がうまくいかないのかわかりません。デバッガがそのメソッドにヒットするのを見ることができますが、内部のmethod.Howには入っていません。ここでTask.Factory.StartNewでメソッドを実行していない。

var list = ftp.GetFileList(remotepath); 

//------------------- 
DateTime dt = DateTime.Now; 
string st = String.Format("{0:yyyyMMdd}", dt);//20161120 
Task[] myTasks = new Task[list.Count]; 
int i = 0; 
foreach (string item in list) 
{ 
    { 
    if (item.StartsWith("GExport_") && (!item.ToUpper().Contains("DUM")) && (item.Contains(st)) && (!item.ToUpper().Contains("BLK"))) 
    { 
     4gpath = item; 
     //Downloadfile() 
     ftp.Get(dtr["REMOTE_FILE_PATH"].ToString() + 4gpath , @localDestnDir + "\\" + dtr["SOURCE_PATH"].ToString()); 
     download_location_hw = dtr["LOCAL_FILE_PATH"].ToString(); 
     // Spin off a background task to process the file we just downloaded 
     myTasks[i++] = Task.Factory.StartNew(() => 
     { 
      //Extractfile()    
      ExtractZipfiles(download_location_hw + "//" + huwawei4gpath, dtr["REMOTE_FILE_PATH"].ToString(), 
       dtr["FTP_SERVER"].ToString(), dtr["FTP_USER_ID"].ToString(), 
       dtr["TECH_CODE"].ToString(), dtr["VENDOR_CODE"].ToString()); 
      //Extract the zip file referred to by download_location_hw 
      // Process the extracted zip file 
      ProcessFile() 
     }); 
     } 
    } 
    } 
    Task.WaitAll(myTasks); 

ProcessFile()方法がで実行されていないすべての

EDIT filepath原因の問題で、おかげでタイプミスがありましたが、最初のファイルと同じファイルを解凍するので、私の質問ですが、任意の同期の問題がありますファイルが利用できなかった時のプロセスファイル - 処理前に解凍を待つか -

チェックが追加されましたwhile(!File.Exists("")) { Thread.Sleep(1000); これは何ですか?

+0

「ProcessFile」が実行されていないことをどのように知っていますか?あなたはその行にブレークポイントを置こうとしましたか? – wdosanjos

+0

私はブレークポイントをそこに置くとそこにぶつかっているが、内部には入っておらず、データベースのどれもがデータベースにプッシュされていないことがわかる。ファイルがダウンロードされ、正常に抽出された。 – peter

+0

@peterおそらくあなたはメインのスタックトレース糸。 – mybirthname

答えて

1

ここでこのコードを試してみると、動作することがわかります。これはあなたのコードによく似ています。これが機能するので、あなたの問題は他の場所であり、タスクに関連していません。

class Program { 
    static void Main(string[] args) { 
    var list = new List<string> { "1", "2" }; 
    Task[] myTasks = new Task[ list.Count ]; 
    int i = 0; 
    foreach(string item in list) { 

     // Spin off a background task to process the file we just downloaded 
     myTasks[ i++ ] = Task.Factory.StartNew(() => 
     { 

      //Extract the zip file referred to by download_location_hw 
      // Process the extracted zip file 
      ProcessFile(); 

      }); 
    } 



    Task.WaitAll(myTasks); 

    Console.WriteLine("in main after processing..."); 
    Console.Read(); 
    } 

    private static void ProcessFile() { 
    Console.Write("Processed..."); 
    } 
} 
+0

あなたは正しいですか、ファイルパスに問題があった、おかげで、私の質問は、最初にファイルと同じ時間プロセスファイルをファイルが利用できなかったので、それが前に解凍を待つでしょうか?現在、私はファイルを取得することができません。 – peter

+0

のように、このチェックを追加しました。(!File.Exists( "")) { Thread.Sleep(1000); }それは問題を作ります – peter

+0

かなりの数の人があなたにこれを行うように尋ねたので、質問を編集してください。私はあなたを助けることができます。 – CodingYoshi

関連する問題