Вы можете использовать функцию setTimeout для объекта ответа. Рассмотрим простой пример:
const http = require('http');
const port = 3000;
const requestHandler = (req, res) => {
res.setTimeout(Math.random() * 2500, () => {
res.writeHead(408);
res.end();
});
setTimeout(() => {
if (res.headersSent) {
return;
}
res.writeHead(200);
res.write('OK');
res.end();
}, 2000);
};
const server = http.createServer(requestHandler);
server.listen(port, (err) => {
if (err) {
return console.log('an error happened', err)
}
console.log(`server is listening on ${port}`)
});
Если вы позвоните localhost:3000
в своем веб-браузере, вы увидите либо 200 OK, либо ошибку 408. Обратите внимание, что вам нужно обработать уже отправленные заголовки, если случайный тайм-аут был менее 2000 мс.
Ответ JaredPar почти работал. Должны быть изменены две вещи:
Т.е.:
property Object^ IListItems[int]{
virtual Object^ get(int index) = System::Collections::IList::default::get;
virtual void set(int index, Object^ item) = System::Collections::IList::default::set;
}
Не сделали большого количества интерфейсов в C++ / CLI, но это, кажется, покрыто 8.8.10.1 из C++ / СПЕЦИФИКАЦИЯ CLI. Я верю функции, которую Вы ищете, явное переопределение. В этом необходимо указать реализованного участника после определения как так.
property Object^ default[int] = System::Collections::IList::default {... }
Я скомпилировал реализацию класса IList<T>
явно записанный в C# и открытый это с Отражателем и демонтированный к C++ / CLI.
T System::Collections::Generic::IList<T>::get_Item(Int32 __gc* index)
{
//
}
void __gc* System::Collections::Generic::IList<T>::set_Item(Int32 __gc* index, T value)
{
//
}
Но это не компилирует: get_Item
, set_Item
не член IList<T>
;