【问题标题】:Wait async function to finish from console Main() [duplicate]等待异步函数从控制台 Main() 完成 [重复]
【发布时间】:2022-03-01 04:05:31
【问题描述】:

如何在 Main 中等待控制台应用程序中的 RunScrapper() 函数完成?

    static void Main(string[] args)
    {
        RunScrapper();
    }

    static async void RunScrapper()
    {
        // Download the Chromium revision if it does not already exist
        await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultChromiumRevision);

        // Create an instance of the browser and configure launch options
        Browser browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = false
        });

        // Create a new page and go to Bing Maps
        Page page = await browser.NewPageAsync();
        await page.GoToAsync("https://www.google.es");
    }

如果我输入await RunScrapper();,它表示 Main() 应该是异步的,而 RunScrapper() 应该返回一个 Task。

问题是程序运行并没有任何反应,因为程序在 RunScrapper() 执行任何操作之前关闭。

【问题讨论】:

  • 您知道您也可以将 Main 方法更改为异步吗?
  • 另外,不要让你的RunScrapper 使用async void,而是使用async Task
  • 改用static async Task Main()。绝对将RunScrapper 更改为async Task RunScrapper。只有异步事件处理程序才能使用async void。不能期待这样的方法。现在,您的应用程序在不等待异步方法完成的情况下退出
  • 需要的主要方法:静态异步任务 Main(string[] args)

标签: c#


【解决方案1】:

您可以将 Main 方法更改为异步。

public static async Task Main(string[] args)
{
       await DoStuffAsync();
}

public static async Task DoStuffAsync(){
       ...    
}

【讨论】:

    猜你喜欢
    • 2019-06-16
    • 1970-01-01
    • 2019-11-29
    • 2023-03-10
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多