我是使用async修饰符进行异步编程的新手.我试图弄清楚如何确保我Main的控制台应用程序的方法实际上异步运行.
class Program
{
static void Main(string[] args)
{
Bootstrapper bs = new Bootstrapper();
var list = bs.GetList();
}
}
public class Bootstrapper {
public async Task<List<TvChannel>> GetList()
{
GetPrograms pro = new GetPrograms();
return await pro.DownloadTvChannels();
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这不是从"顶部"异步运行的.由于无法async在Main方法上指定修饰符,如何在main异步中运行代码?
我知道这是一个设计问题,但我正在努力理解这一点,以便以最佳方式使用它。因此,请考虑该问题,以阐明如何使用其最大功能。
为什么它不是设计为基础的KISS同步和异步有方法(StartAsync,StopAsync),据我所知,异步的Web请求的主要好处是让一些空闲线程释放被用来为进一步的请求,但它不能是这样的对于IHostedService因为没有的请求的概念和总有一个运行(或悬浮)线程。
在未完成的任务之前等待将控制权交给调用者,直到任务完成。
当您在 Main() 中使用它时,谁将获得控制权?
public static async Task Main()
{
await F1() ; //This await will pass the control to ???
}
public static async Task F1()
{
await Task.Run(()=>{...}) ; //This await will pass the control to Main()
}
Run Code Online (Sandbox Code Playgroud)