我正在初始化一个结构,然后将结果返回到变量,然后,如果结果正常,我想在该变量上启动一个线程,而不是随后删除它,因为这也会删除并停止线程。
let tcp_server: Result<TcpServer> = TcpServer::new(
settings.server.ip.clone(),
&settings.http,
request_handler.clone(),
);
if tcp_server.is_ok() {
tcp_server.unwrap().start_thread();
// tcp_server is dropped here
}
IpcListener::new().listen_block(); // Block the main thread
// I want it to be dropped here
有没有什么方法可以在结果包装的 tcp_server 上启动线程,只有在结果正常而不改变其范围的情况下,或者会有什么替代方案?
您的代码显然不完整,因为它不可能工作。但是,如果您想保留条件语句末尾可能存在或不存在的内容,您可以使用
Option
:
let _server = if tcp_server.is_ok() {
tcp_server.start_thread();
// tcp_server is dropped here
Some(tcp_server)
} else { None }
IpcListener::new().listen_block();
仅当
tcp_server
被丢弃时,_server
才会被丢弃。如果服务器从未存在过,则选项将为 None
,并且当 _server
被删除时,不会删除任何内容。