我有一个看起来像这样的方法:
static async Task<string> GetGooglePage(ProxyInfo proxy)
{
using (var m=new MyNetworkClass())
{
m.Proxy = proxy;
return await m.GetAsync("http://www.google.com");
}
}
现在我想从非异步的方法中调用它,并得到结果。
我试图这样做的方式是这样的:
foreach (var proxy in proxys)
{
try
{
GetGooglePage(proxy.ToProxyInfo()).Wait();
}
catch
{}
lock (Console.Out)
{
Console.Write(current++ + "\r");
}
}
我的问题是有时GetGooglePage(proxy.ToProxyInfo()).Wait();
出现死锁(根据 Visual Studio 调试器,此调用之外没有堆栈)。
我不想一直使用 async 到Main()
. 如何正确调用GetGooglePage
同步代码而不会有死锁风险?