我想了解/了解更多关于异步/等待在C#中,我会把自己放在菜鸟类,所以你所有的意见/建议是值得欢迎的。我写了一个小测试,以更好地理解和澄清关于等待/异步。我的程序在“GetStringLength”调用后冻结了我试着读了几件事情,但看起来像被卡住了,我想到了我可能做错的专家意见。你能指导我或指着我正确的方向吗?等待异步澄清
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace AsyncPatterns
{
class Program
{
static void Main(string[] args)
{
Program p = new Program();
Task<string> url = p.FindLargtestWebPage(new Uri[]{new Uri("http://www.google.com"),
new Uri("http://www.facebook.com"),
new Uri("http://www.bing.com") });
Console.WriteLine(url.Result);
Console.ReadLine();
}
public async Task<string> FindLargtestWebPage(Uri[] uris)
{
string highCountUrl = string.Empty;
int maxCount = 0;
foreach (Uri uri in uris)
{
Console.WriteLine(string.Format("Processing {0}", uri.ToString()));
var pageContent = await GetWebPageString(uri);
var count = await GetStringLength(pageContent);
if (count > maxCount)
{
highCountUrl = uri.ToString();
}
}
return highCountUrl;
}
public async Task<int> GetStringLength(string pageData)
{
Console.WriteLine("Getting length");
return await new Task<int>(() =>
{
return pageData.Length;
});
}
public async Task<string> GetWebPageString(Uri uri)
{
WebClient webClient = new WebClient();
Console.WriteLine("Downloading string");
return await webClient.DownloadStringTaskAsync(uri.ToString());
}
}
}
这是一个很好的视频,解释它是如何工作和它是什么http://www.youtube.com/watch?v=6_GTdR0gBVE –
@DustinDavis:谢谢! –