如何解决如何等待存储在容器中的多个期货如Task.WhenAll
我正在尝试将多个(8)TcpStream
异步连接到服务。
目前,我在tokio
运行时中使用async
。
我正在努力弄清楚如何等待多个futures
并获得他们的Result
。
在C#
中,我可能会这样做:
C#
public Task ConnectAsync( IReadOnlyList<TcpClient> clients )
{
var tasks = new List<Task>( clients.Count );
foreach( var client in clients )
tasks.Add( client.ConnectAsync( "some address",32005 ) );
return Task.WhenAll( tasks );
}
上面的C#
代码是/正在尝试解决Rust
中相同问题的方式
铁锈
pub async fn connect( &self ) {
let mut futures = Vec::with_capacity( self.endpoints.len( ) );
for ep in &self.endpoints {
// The TcpStream is the tokio::net::TcpStream.
futures.push( TcpStream::connect(
format!( "{}:{}",ep.address( ),ep.port( ) ) ) );
}
// Here I would like to await for all of the futures
// to complete and then get the Result<Tcpstream>'s back...
}
我在这里的计划是await
让所有期货都完成,然后map
将结果Vec<TcpStream>
假定没有错误发生。
所以重申一下,我该如何等待存储在一个容器中的多个期货并在它们全部完成后获取结果?
此外,我是否可以正确解决此问题?我在想可能有更好的方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。