Никогда не пытайтесь завершить процесс узла при отмене какой-либо задачи.
Параметр CancellationToken
в InvokeAsync<T>(CancellationToken cancellationToken, string moduleName, params object[] args)
не используется для завершения процесса Node.js
,, но используется для отмены кода .NET
, который вызывает те сценарии, которые написаны в Node.js
.
Допустим, в Node.js выполняется 3 асинхронных задачи:
setTimeout(resolve, 100, 100); // task 1
setTimeout(resolve, 200, 100); // task 2
setTimeout(resolve, 300, 100); // task 3
Теперь мы хотим отменить 2-ю задачу, поскольку INodeServices
- это одноэлементная служба, и JavaScript запускается в одном потоке, если мы решим завершить процесс node.js, задача 1 и задача 2 также завершатся неудачей.
Во-вторых, .NET
не имеет представления о том, что следует делать в Node.js
, когда задача достигает своего предела времени ожидания .Допустим, вы запросили некоторые ресурсы в Node.js
, и вы освободите ресурсы, когда задача будет выполнена.Теперь вы используете .NET
для отмены задачи, а как насчет ресурсов, выделенных в Node.js
?
Я предлагаю вам превратить ваш код Node.js
в задачу, которую можно автоматически отменить.Поскольку в JavaScript пока нет обещаний, которые можно отменить, вы можете использовать стороннюю библиотеку или настроить собственные дополнения.