【发布时间】:2019-09-18 05:02:26
【问题描述】:
我试图在另一个静态方法中调用Browser.NewPageAsync(),但是当我调用它时,调用它的方法就退出了。
partial class Program
{
static Browser Browser;
static async Task StartBrowser()
{
Browser = await Puppeteer.LaunchAsync
(
new LaunchOptions
{
Headless = true,
ExecutablePath = "Chromium\\chrome.exe"
}
);
Console.WriteLine("Browser launched");
}
static void StartScraping(int threads)
{
for (int i = 0; i < threads; i++)
{
Task.Run(async () =>
{
int ThreadNumber = i;
Console.WriteLine("Thread #" + ThreadNumber + " started");
Page p = await Browser.NewPageAsync(); //exits here
await p.GoToAsync("https://www.google.com");
Console.WriteLine("Content:\n" + await p.GetContentAsync());
});
}
}
static async Task MainAsync()
{
await StartBrowser();
StartScraping(1);
}
static void Main(string[] args)
{
MainAsync().GetAwaiter().GetResult();
}
}
例如:如果我在MainAsync() 中调用Browser.NewPageAsync(),那么Browser.NewPageAsync() 将按预期调用。
【问题讨论】:
-
在第 3 行中,您尝试声明一个与该类具有相同名称的变量,直到您尝试设置该变量,该变量才有效,然后编译器不知道您是否要使用浏览器类或浏览器变量。为避免此类问题,请遵守 C# 命名约定,并使用下划线和小写来命名您的浏览器变量,因为它是私有的静态变量。
-
在Task.Run()中加入try()catch()并将Browser重命名为_Browser后没有发现异常
标签: c# async-await static-methods puppeteer-sharp