我知道asyncio.gather
,它“批处理”几个协同程序。但那不是我要找的
我正在寻找一种方法来对调用方同时运行一个协程X
,在运行协程X
时做一些其他工作,然后回来从协程X
获取结果
在C#中,我们可以执行以下操作:
using System;
using System.Threading.Tasks;
using System.Threading;
namespace demo
{
class Program
{
static void Main(string[] args)
{
Task<int> task = DoWork(); // run **Concurrently**
System.Console.WriteLine("Do something else in Main");
Thread.Sleep(3000); // Do something else
// Come back to it:
var result = task.Result;
System.Console.WriteLine($"Result is {result}");
}
static async Task<int> DoWork()
{
System.Console.WriteLine("Running DoWork...");
await Task.Delay(2000);
System.Console.WriteLine("DoWork is done.");
return 1;
}
}
}
结果是
>>> dotnet run
Running DoWork...
Do something else in Main
DoWork is done.
Result is 1
注意:在上面的示例中,我们可以将Main
更改为async Task MainAsync()
,然后只需要将int result = task.Result;
更改为int result = await task;
。我的观点仍然是
Python asyncio中是否存在等价性
更新这个问题不是重复的-run_in_executor
采用传统的python函数并将其调度到线程池或进程池执行器上以实现并发。但是,我特别要求安排一个异步函数(coroutine)。关键是我仍然可以在coroutine中使用await
进行同步。因此,让我重复一下我的问题:如何使用asyncio并发地运行异步函数(即协程)
目前没有回答
相关问题 更多 >
编程相关推荐