C#的演化
在这里主要讲的是C#5.0的焦点特性异步
异步的例子
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace 异步编程
{
class Program
{
static void Main(string[] args)
{
MyDownloadString ds = new MyDownloadString();
ds.DoRun();
}
}
class MyDownloadString
{
Stopwatch sw = new Stopwatch();
public void DoRun()
{
const int LargeNumber = 600000;
sw.Start();
Task<int> t1 = CountCharactersAsync(1, "http://www.microsoft.com");
Task<int> t2 = CountCharactersAsync(2, "http://www.illustratedcsharp.com");
CountToALargeNumber(1, LargeNumber);
CountToALargeNumber(2, LargeNumber);
CountToALargeNumber(3, LargeNumber);
CountToALargeNumber(4, LargeNumber);
Console.WriteLine("Chars in http://www.microsoft.com :{0}", t1.Result);
Console.WriteLine("Chars in http://www.illustratedcsharp.com :{0}", t2.Result);
}
private async Task<int> CountCharactersAsync(int id, string site)
{
WebClient wc = new WebClient();
Console.WriteLine("Starting call {0}: {1, 4 NO} ms", id, sw.Elapsed.TotalMilliseconds);
string result = await wc.DownloadStringTaskAsync(new Uri(site));
Console.WriteLine(" Call{0} completed : {1, 4:NO} ms", id, sw.Elapsed.TotalMilliseconds);
return result.Length;
}
private void CountToALargeNumber(int id, int value)
{
for (long i = 0; i < value; i++) ;
Console.WriteLine(" End counting {0}:{1, 4:NO} ms", id, sw.Elapsed.TotalMilliseconds);
}
}
}