如何在 mojo 中实现异步代码(使用asyncetc. )?
在 Changelog 中,我找到了以下示例(略有调整):
How can I implement asynchroneous code in mojo (using async
etc.)?
In the Changelog, I find the following example (slightly adjusted):
async fn add_three(a: Int, b: Int, c: Int) -> Int:
return a + b + c
async fn call_it():
var task = add_three(1, 2, 3)
print(await task)
This gives me the following compiler error:
test_async.mojo:39:17: error: 'Coroutine[Int, {}]' is not copyable because it has no '__copyinit__'
print(await task)
^~~~
I do not understand this error, as I thought that Coroutine
is register passable (as visible in the source code). What works is
async fn add_three(a: Int, b: Int, c: Int) -> Int:
return a + b + c
async fn call_it():
var task = await add_three(1, 2, 3)
print(task)
However, if I always put await
on the right hand side, I will never be able to execute code asynchroneously, as I am always waiting until the line has finished. What am I doing wrong / where is my misconception? (Or is this simply a bug?)
In the changelog it furthermore says that tasks can be "resumed" after completion (see here). What is meant by "resume" and how do I do that?
I am working with the nightly built mojo 2024.7.2005 (96a1562c).
Addon: I asked this question on the Q&A page and on SO some time ago. Sorry for the double posting; I just do not know what is the best way to get in touch with people who can help. I will keep the copies up to date (or delete them if people think this would be better).