相关疑难解决方法(0)

无法在控制台应用程序的"Main"方法上指定"async"修饰符

我是使用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异步中运行代码?

.net c# asynchronous console-application

415
推荐指数
10
解决办法
18万
查看次数

为什么IHostedService是异步的

我知道这是一个设计问题,但我正在努力理解这一点,以便以最佳方式使用它。因此,请考虑该问题,以阐明如何使用其最大功能。

为什么它不是设计为基础的KISS同步和异步有方法(StartAsync,StopAsync),据我所知,异步的Web请求的主要好处是让一些空闲线程释放被用来为进一步的请求,但它不能是这样的对于IHostedService因为没有的请求的概念和总有一个运行(或悬浮)线程。

.net asynchronous .net-core asp.net-core .net-core-2.0

4
推荐指数
1
解决办法
1418
查看次数

在 Main 方法中等待 - 谁获得控制权,直到任务完成?

在未完成的任务之前等待将控制权交给调用者,直到任务完成。

当您在 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)

c# program-entry-point async-await

4
推荐指数
1
解决办法
55
查看次数