Чтение значений ячеек в нескольких потоках одновременно

Contents
[ ]

Для чтения значений ячеек в нескольких потоках одновременно установите Cells.setMultiThreadReading(boolean) в true. Иначе вы можете получить неправильные значения ячеек.

Следующий код:

  1. Создает рабочую книгу.
  2. Добавляет лист.
  3. Заполняет лист строковыми значениями.
  4. Затем создает два потока, которые одновременно читают значения из случайных ячеек. Если прочитанные значения правильные, ничего не происходит. Если прочитанные значения неправильные, то отображается сообщение.

Если вы закомментируете эту строку:

testWorkbook.getWorksheets().get(0).getCells().setMultiThreadReading(true);

тогда отображается следующее сообщение:

if (s !== "R" + row + "C" + col)
{
    console.log("This message box will show up when cells read values are incorrect.");
}

В противном случае программа работает без отображения любого сообщения, что означает, что все значения, считываемые из ячеек, являются правильными.

const path = require("path");
const AsposeCells = require("aspose.cells.node");
const dataDir = path.join(__dirname, "data");
let testWorkbook;
const threadLoop = () => {
const random = Math.random;
while (true) {
try {
const row = Math.floor(random() * 10000);
const col = Math.floor(random() * 100);
const s = testWorkbook.getWorksheets().get(0).getCells().get(row, col).getStringValue();
if (s !== "R" + row + "C" + col) {
console.log("This message will show up when cells read values are incorrect.");
}
} catch (e) {}
}
};
const testMultiThreadingRead = () => {
testWorkbook = new AsposeCells.Workbook();
testWorkbook.getWorksheets().clear();
testWorkbook.getWorksheets().add("Sheet1");
for (let row = 0; row < 10000; row++)
for (let col = 0; col < 100; col++)
testWorkbook.getWorksheets().get(0).getCells().get(row, col).setValue("R" + row + "C" + col);
// Uncommenting this line will enable multi-threaded reading
//testWorkbook.getWorksheets().get(0).getCells().setMultiThreadReading(true);
const myThread1 = setInterval(threadLoop, 0);
const myThread2 = setInterval(threadLoop, 0);
setTimeout(() => {
clearInterval(myThread1);
clearInterval(myThread2);
}, 5 * 1000);
};
testMultiThreadingRead();