2017-10-16 1 views
0

タスクのステータスを更新しようとしています。私はGUIDをキーにしたタスクの辞書を作成し、値をdoubleに設定しました。それから私は何個のアクションを計算し、それを "トータルオペレーション"として保存します。完了したジョブの割合は、finishedOperations/totalOperationsになります。しかし、私がデータを記録するとき、私はいつも仕事が終わったときに終わりまで "0"を得るので、仕事は "1"と同じです。 ?。ダブルタスクデータの更新

public ActionResult BuildPackets() 
    { 

     var taskId = Guid.NewGuid(); 
     tasks.Add(taskId, 0); 

     Task.Factory.StartNew(() => 
     { 
      baseDir = _env.WebRootPath + "\\iManageStorage\\"; 
      FolderHelper.clearFolder(baseDir); 
      string WorksiteSetting = "!nrtdms:0:!session:NYCDMS:!database:NewYork:!"; 
      iManage worksite = new iManage(iManage.GetServerFromDocumentID(WorksiteSetting), iManage.GetDatabaseFromDocumentID(WorksiteSetting)); 

      IEnumerable<Packet> packetsToBuildTmp = _Repository.GetAllPackets(); 
      List<Packet> packetsToBuild = packetsToBuildTmp.ToList(); 
      var finishedOperations = 0; 
      var totalOperations = packetsToBuild.Count + 1; 
      foreach(Packet p in packetsToBuild) 
      { 
       totalOperations = totalOperations + p.Documents.Count; 
      } 

      foreach (Packet packet in packetsToBuild) 
      { 

       tasks[taskId] = finishedOperations/totalOperations; 
       //tasks[taskId] = (i/packetsToBuild.Count); // update task progress 
       PBPacket pbpacket = new PBPacket(packet, baseDir, worksite); 

       foreach (Document document in packet.Documents) 
       { 
        pbpacket.addID(report: document.Name, id: document.ImanageId, worksheet: document.Worksheet, printArea: document.Printarea, whiteout: document.Whiteout); 
        finishedOperations++; 
        tasks[taskId] = finishedOperations/totalOperations; 
       } 

       Console.WriteLine("BUILDING " + packet.Name + " ************"); 
       pbpacket.printFilesInPacket(); 
       pbpacket.convertToPDF(); 
       pbpacket.mergePacketFiles(); 

       finishedOperations++; 
       tasks[taskId] = finishedOperations/totalOperations; 
      } 

      string filename = baseDir + "reports.zip"; 
      using (ZipFile zip = new ZipFile()) 
      { 
       foreach (Packet packet in packetsToBuild) 
       { 
        zip.AddFile(baseDir + packet.Name + ".pdf", ""); 
       } 
       zip.Save(filename); 
      } 
      finishedOperations++; 
      tasks[taskId] = finishedOperations/totalOperations; 
     }); 

     return new OkObjectResult(taskId); 
    } 

    [HttpPost("api/build/progress/{id}")] 
    public ActionResult Progress(Guid id) 
    { 
     baseDir = _env.WebRootPath + "\\iManageStorage\\"; 
     Boolean boo = tasks.Keys.Contains(id); 

     if (boo) 
     { 
      return new OkObjectResult(tasks[id]); 
     } 
     return new OkObjectResult("Id " + id + "does not exist."); 
    } 
+0

、それが可能です'finishedOperations'と' totalOperations'の両方が 'Int32'として格納されているので、div isionは整数除算ですか?多分 'finishedOperations'を' Double'にキャストすべきでしょうか? –

+0

@AdamKingsleyそれだった。ありがとう。それを答えて、私はそれを解決したものとしてマークします。 – user1093111

答えて

1

それはfinishedOperationstotalOperations両方がInt32として格納されているので、除算は、整数の除算であることが可能です

解決策:あなたがDoublefinishedOperationsを唱えられる

関連する問題