(Это репост вопроса, который я задавал несколько часов go, в котором не было достаточно подробностей и он был закрыт) * 1001 *
У меня есть процедура импорта, которая берет содержимое из файла json и использует JsonConvert.Deserialize () для чтения содержимого в динамическую c переменную, называемую «items». Вот фрагмент кода (кое-что удалено для краткости - эта процедура состоит из 800 строк ....)
Он запускается из события Page_Load следующим образом:
protected void Page_Load(object sender, EventArgs e)
{
if (Helpers.RequestString("task") == "importData") // Helpers is a function I have created to sanitize query string input
{
ImportData_new(); // this is the process being called
}
}
I я добавляю к объекту StringBuilder во время этого процесса, а затем записываю содержимое построителя строк в файл журнала в конце цикла по элементам в json.
Теперь сам метод;
private void ImportData_new()
{
_importGroup = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
_logOutput.Clear();
_logOutput.Append(string.Format("{0}: {1}{2}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "###################### INITIALISING IMPORT ROUTINE #######################", Environment.NewLine));
//File.AppendAllText(_logPath, _logOutput.ToString());
var OK = true;
// Grab the text file contents
var file_content = "";
try
{
file_content = System.IO.File.ReadAllText(_filePath + "testjson.json");
}
catch (Exception e)
{
OK = false;
//_logOutput.Clear();
_logOutput.Append(string.Format("{0}: {1}{2}{3}################# IMPORT ABORTED #################{3}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "Import aborted: Unable to read text from text file. Error: ", e.Message, Environment.NewLine));
File.AppendAllText(_logPath, _logOutput.ToString());
}
var file_content = System.IO.File.ReadAllText(_filePath + "testjson.json");
dynamic items = JsonConvert.DeserializeObject(file_content);
foreach (dynamic item in items){
// read values from the "item" dynamic object and use them to create a database record/row
// Here's one example of the numerous sections I am processing
var DayNightValue = item["TabA OperationalHours"] != null && item["TabA OperationalHours"].Value != null && item["TabA OperationalHours"].Value != "" && item["TabA OperationalHours"].Value.ToString().Trim() != "" ? item["TabA OperationalHours"].Value.ToString().Trim() : "";
if (DayNightValue != "")
{
if (DayNightValue.ToString().ToLower().StartsWith("day"))
{
_logOutput.Append(string.Format("{0}: {1}{2}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "Item " + counter + ": Day/Night: Day", Environment.NewLine));
hems.DayNightVal = "Day";
}
if (DayNightValue.ToString().ToLower().StartsWith("night"))
{
_logOutput.Append(string.Format("{0}: {1}{2}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "Item " + counter + ": Day/Night: Night", Environment.NewLine));
hems.DayNightVal = "Night";
}
}
else
{
hems.DayNightVal = null;
_logOutput.Append(string.Format("{0}: {1}{2}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "## WARNING for Item " + counter + ": Day/Night value is empty. Setting as null.", Environment.NewLine));
}
...process the rest of the properties in the json item
} // end of the for loop.
}
....<snipped>
В конце процедуры я вывожу информацию журнала в текстовый файл. Файл журнала показывает, что один l oop работает, но до его завершения запускается другой, поэтому в файле журнала отображается информация от одного l oop, смешанного с другим. За один импорт в журнал должно быть записано 3 записи (тестирование только с 3 записями). Но происходит то, что процедура запускает один импорт, но затем, кажется, происходит вторичный импорт - см. Ниже (мои заметки заключены в CAPS, окруженные квадратными скобками). Обратите внимание на неупорядоченную запись строки (см. Отметки времени).
[**IMPORT STARTS**]
2020-08-06 13:18:12: ###################### INITIALISING IMPORT ROUTINE #######################
2020-08-06 13:18:12: 3 rows found.....
2020-08-06 13:18:12: Importing Item 1: Flight Record: xxxx, Mission Date: 4/08/2020 12:00:00 AM, Mission Number: 343, Patient: xxxx
2020-08-06 13:18:12: Item 1: Mission Authorised By Airdesk (Value Yes).
2020-08-06 13:18:12: Item 1: Service Item Code Value: (Supplied: ETA11) Actual ID:6888
2020-08-06 13:18:12: Item 1: Day/Night: Day
2020-08-06 13:18:12: Item 1: Reason for use of Helicopter (Value: Multi reasons), actual ID: 8.
2020-08-06 13:18:12: Item 1: Mission Type Value: (Supplied: Pre Hospital Trauma) Actual ID:6906
2020-08-06 13:18:12: Item 1: Patient Outcome Value: (Supplied: Life saved) Actual ID:7134
[**......SNIPPED SOME OF THE ROWS**]
[**LOG GOES THROUGH FIRST ITEM IN IMPORT BUT THEN INSTEAD OF SHOWING THE NEXT TWO ITEMS, SHOWS THE FINISHED NOTIFICATION**]
2020-08-06 13:18:12: ############ IMPORT FINISHED ############
[**THEN SHOWS ANOTHER ONE STARTING - NOTE IT SAYS "Item 1" again...**]
2020-08-06 13:18:12: ###################### INITIALISING IMPORT ROUTINE #######################
2020-08-06 13:18:12: 3 rows found.....
2020-08-06 13:18:12: Importing Item 1: Flight Record: 5676, Mission Date: 4/08/2020 12:00:00 AM, Mission Number: 343, Patient: xxxx
2020-08-06 13:18:12: Item 1: Mission Authorised By Airdesk (Value Yes).
2020-08-06 13:18:12: Item 1: Service Item Code Value: (Supplied: ETA11) Actual ID:6888
2020-08-06 13:18:12: Item 1: Day/Night: Day
[**......SNIPPED SOME OF THE ROWS - SAYS IT'S FINISHED AFTER 1 ITEM AGAIN**]
2020-08-06 13:18:12: ############ IMPORT FINISHED ############
[**NOW THE TIME IN THE LOG CHANGES TO 27 SECONDS AFTER THE IMPORT STARTED - BUT THIS TIME SEEMINGLY STARTING ON Item 2**]
2020-08-06 13:18:29: Importing Item 2: Flight Record: 5678, Mission Date: 4/08/2020 12:00:00 AM, Mission Number: 474, Patient: xxxx
2020-08-06 13:18:29: Item 2: Mission Authorised By Airdesk (Value Yes).
2020-08-06 13:18:29: Item 2: Service Item Code Value: (Supplied: METAT11) Actual ID:6902
2020-08-06 13:18:29: Item 2: Day/Night: Night
[**......SNIPPED SOME OF THE ROWS**]
[**FINISHES AFTER ITEM 2 THIS TIME**]
2020-08-06 13:18:29: ############ IMPORT FINISHED ############
2020-08-06 13:18:12: ###################### INITIALISING IMPORT ROUTINE #######################
2020-08-06 13:18:12: 3 rows found.....
[**IMPORT STARTS AGAIN - AND NOTE THE TIME STAMP HAS GONE IN REVERSE**]
[**FINISHES AGAIN AFTER ONLY ONE ITEM**]
2020-08-06 13:18:12: ############ IMPORT FINISHED ############
[**NOTE THE TIME HAS CHANGED YET AGAIN**]
2020-08-06 13:18:29: Importing Item 2: Flight Record: 5678, Mission Date: 4/08/2020 12:00:00 AM, Mission Number: 474, Patient: xxxx
2020-08-06 13:18:29: Item 2: Mission Authorised By Airdesk (Value Yes).
2020-08-06 13:18:29: Item 2: Service Item Code Value: (Supplied: METAT11) Actual ID:6902
2020-08-06 13:18:29: Item 2: Day/Night: Night
2020-08-06 13:18:29: Item 2: Reason for use of Helicopter (Value: Time), actual ID: 3.
2020-08-06 13:18:29: Item 2: Mission Type Value: (Supplied: IHT) Actual ID:6908
2020-08-06 13:18:29: Item 2: Patient Outcome Value: (Supplied: Further complications avoided) Actual ID:6973
[**CONTINUES TILL DONE - BUT ERRORS ON THE BROWSER PAGE AS IT WOULD SEEM THAT TWO THREADS ARE ATTEMPTING TO OPEN THE LOGGING TXT FILE AT ONCE**]
Итак, похоже, что действительно есть по крайней мере два (возможно, больше, если смотреть на журнал как признак), выполняющих ImportData_new () метод. Может быть здесь проблема с Page_Load? Это единственный процесс, вызывающий метод.
Клифф