【发布时间】:2014-03-09 19:28:23
【问题描述】:
我正在尝试学习/理解更多关于 C# 中的 async/await 的信息,我会将自己归为菜鸟类别,因此欢迎您提出所有 cmets/建议。我写了一个小测试来更好地理解和澄清等待/异步。我的程序在“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());
}
}
}
【问题讨论】:
-
这是一个很好的视频,解释了它的工作原理和作用youtube.com/watch?v=6_GTdR0gBVE
-
@DustinDavis:谢谢!!
标签: .net async-await c#-5.0