我正在使用Puppeteer-Sharp下載html站點的 ,我創建了一個調用的方法,該方法GetHtml返回一個包含站點內容的字符串。問題是當我撥打電話時await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);應用程序退出沒有任何錯誤,這是我的代碼:public class Program{ public static void Main(string[] args) { try { new FixtureController().AddUpdateFixtures(); } catch (Exception ex) { new Logger().Error(ex); } }}public async Task AddFixtures(){ int monthDays = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month); var days = Enumerable.Range(1, monthDays).Select(x => x.ToString("D2")).ToArray(); HtmlDocument doc = new HtmlDocument(); //this is part of Htmlagilitypack library foreach (var day in days) { //Generate url for this iteration Uri url = new Uri("somesite/" + day); var html = await NetworkHelper.GetHtml(url); doc.LoadHtml(html); }}所以每次 foreach 迭代都會生成一個 url 來下載數據,并且該方法GetHtml應該html在到達時返回但應用程序退出(沒有錯誤)var html = ..,這是以下代碼GetHtml: public static async Task<string> GetHtml(Uri url) { try { //here the crash await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision); } catch (Exception e) { //No breakpoint point firing } await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision); var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true }); using (Page page = await browser.NewPageAsync()) { await page.GoToAsync(url.ToString()); return await page.GetContentAsync(); } }
1 回答

MMTTMM
TA貢獻1869條經驗 獲得超4個贊
您的 main 方法不會等待異步調用的結果。main 方法退出,關閉應用程序。要修復它,您需要等待異步方法完成。
如果您使用的是C# 7.1或更高版本,則可以使用 async Main:
public class Program
{
public static async void Main()
{
await TestAsync();
}
private static async Task TestAsync()
{
await Task.Delay(5000);
}
}
否則你需要同步等待:
public class Program
{
public static void Main()
{
TestAsync().GetAwaiter().GetResult();
}
private static async Task TestAsync()
{
await Task.Delay(5000);
}
}
- 1 回答
- 0 關注
- 356 瀏覽
添加回答
舉報
0/150
提交
取消