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.");
}
、それが可能です'finishedOperations'と' totalOperations'の両方が 'Int32'として格納されているので、div isionは整数除算ですか?多分 'finishedOperations'を' Double'にキャストすべきでしょうか? –
@AdamKingsleyそれだった。ありがとう。それを答えて、私はそれを解決したものとしてマークします。 – user1093111