为什么HttpClient不能在后台工作
本文关键字:后台 工作 不能 HttpClient 为什么 | 更新日期: 2023-09-27 18:05:10
代码
static BackgroundWorker worker = new BackgroundWorker();
static void Main(string[] args)
{
worker.DoWork += worker_DoWork;
worker.RunWorkerCompleted += worker_RunWorkerCompleted;
worker.RunWorkerAsync();
Console.ReadLine();
}
static void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Console.WriteLine(e.Result);
}
public static async void worker_DoWork(object sender, DoWorkEventArgs e)
{
var client = new HttpClient();
string httpResult = await client.GetStringAsync("http://ozgurakpinar.net/androidserver.aspx?param=accenture2");
e.Result = httpResult;
}
在GetStringAsync行中永远等待。但是,当我使用线程而不是BackgroundWorker时,它会工作。
你的误解:
-
async void
立即返回,导致BackgroundWorker
认为工作完成。BackgroundWorker
已被await淘汰。 -
BackgroundWorker
在控制台应用程序中没有意义。
当你扔掉所有不需要的东西时,这实际上很简单:
static void Main(string[] args)
{
Console.ReadLine(worker_DoWork().Result); //intentionally blocking here
}
static async Task<string> worker_DoWork()
{
var client = new HttpClient();
string httpResult = await client.GetStringAsync("http://ozgurakpinar.net/androidserver.aspx?param=accenture2");
return httpResult;
}
异步和线程是危险的工具。