我正在研究和使用 Rust,async/.await用 Rust 编写一个服务,该服务将从一些 websocket 中提取数据并使用该数据执行某些操作。我的一位同事(他在 C# 中做了类似的“数据提要导入”)告诉我异步处理这些提要,因为线程的性能会很差。
据我了解,要在 Rust 中执行任何异步操作,您需要一个运行时(例如 Tokio)。在检查了我发现的关于该主题的大多数代码后,似乎先决条件是:
#[tokio::main]
async fn main() {
    // ...
}
Run Code Online (Sandbox Code Playgroud)
它提供了管理我们的async代码所需的运行时。我得出这个结论是因为你不能.await在不是async函数或块的作用域中使用。
这引出了我的主要问题:如果打算在 Rust 中使用async,你是否总是需要async fn main()如上所述的?如果是这样,您如何构建同步代码?结构体可以async实现方法和函数吗(或者甚至应该)?
所有这些都源于我编写此服务的最初方法,因为我设想的方式是拥有某种可以处理多个 websocket feed 的结构,如果它们需要异步完成,那么通过这种逻辑,该结构将具有要有async逻辑在里面。