根据Preserving the Results of a Throwing Expression文档,可以将抛出表达式转换为Result
类型,如下所示:
let singleSample = Result { try UnreliableRandomGenerator().random() }
是否也可以将async
抛出表达式转换为Result
类型,如:
let singleSample = Result { try await UnreliableRandomGenerator().random() }
1条答案
按热度按时间wqsoz72f1#
没有内置的方法。今天,你不能在stdlib中向
init
传递异步闭包。这是一个非常简单的添加(基于stdlib代码):但请注意,这会使
init
异步,因此您的代码需要:这当然必须在异步上下文中调用。
有可能您正在尝试做的是创建一个“Future”,以便您可以通过同步上下文传递它。已经存在了。它被称为
Task
:当你想把它解析成一个Result时,你可以等待它的
.result
属性:或者你可以跳过Result,直接使用
try-value
访问它的值:在许多情况下,Result在结构化并发世界中并不是那么有用。最好直接使用
try
和await
。但是它仍然可以非常有助于存储属性,通过允许错误的通道传递,以及与非结构化代码交互,因此Task上的.result
属性非常受欢迎,而且它可以轻松地与throws
进行转换。