Я ищу некоторые пояснения при сбое задачи. Как я понимаю, если задача 1 порождает задачу 2, задача 2 является дочерней задачей 1. Если задача 1 терпит неудачу, она автоматически терпит неудачу и очистку после задачи 2?Неудачные задачи в ржавчине
К примеру, я начинаю AI/O задачу на сокете так:
spawn(proc() {
start_new_socket(socket, socket_receiver)
});
Мы будем называть эту задачу 1. В задаче 1, я нерест еще одну задачу:
fn start_new_socket(socket: Socket, receiver: Receiver<Message>) {
// Write task
let mut stream_write = socket.stream.clone();
spawn(proc() {
loop {
let msg = receiver.recv();
msg.send(&mut stream_write).unwrap();
}
});
// Open up a blocking read on this socket
let mut stream_read = socket.stream.clone();
loop {
let msg = Message::load(&mut stream_read).unwrap();
match msg.payload {
Text(ptr) => {
let json_slice = (*ptr).as_slice();
println!("Socket: {} recevied: {}", socket.id, json_slice);
parse_json(json_slice, socket.clone());
}
Binary(ptr) => {
// TODO - Do awesome binary shit
}
}
}
}
Если задача 1, start_new_socket
, сбой из-за EOF
или что-то еще в потоке, запускает ли задача записи, которую она запустила?
Давным-давно, задачи действительно были иерархическими, с множеством опций для контроля их поведения при сбое. Эта сложная система была заменена более простой и доступной, где задачи не имеют отношения друг к другу. – barjak