原始代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Diagnostics;
using System.Net;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Diagnostics;
using System.Net;
namespace ConsoleApp1
{
{
class MyDownloadString
{
Stopwatch sw = new Stopwatch();
{
Stopwatch sw = new Stopwatch();
public void DoRun()
{
const int LargeNumber = 6000000;
sw.Start(); //秒表开始记时
int t1 = CountCharacters(1, "http://www.163.com"); //调用方法,结束时读取秒表时间
int t2 = CountCharacters(2, "http://www.baidu.com");
CountToALargerNumber(1, LargeNumber); //调用4次方法;每次结束时,读取秒表时间
CountToALargerNumber(2, LargeNumber);
CountToALargerNumber(3, LargeNumber);
CountToALargerNumber(4, LargeNumber);
{
const int LargeNumber = 6000000;
sw.Start(); //秒表开始记时
int t1 = CountCharacters(1, "http://www.163.com"); //调用方法,结束时读取秒表时间
int t2 = CountCharacters(2, "http://www.baidu.com");
CountToALargerNumber(1, LargeNumber); //调用4次方法;每次结束时,读取秒表时间
CountToALargerNumber(2, LargeNumber);
CountToALargerNumber(3, LargeNumber);
CountToALargerNumber(4, LargeNumber);
Console.WriteLine("Chars in www.163.com is {0}",t1);
Console.WriteLine("Chars in www.baidu.com is "+t2 );
}
private int CountCharacters(int id,string uriString)
{
WebClient wc1 = new WebClient();
Console.WriteLine("Chars in www.baidu.com is "+t2 );
}
private int CountCharacters(int id,string uriString)
{
WebClient wc1 = new WebClient();
Console.WriteLine("Starting call {0}: {1} ms",id,sw.Elapsed.TotalMilliseconds);
string result = wc1.DownloadString(new Uri(uriString));
Console.WriteLine("Call {0} completed: {1} ms ", id, sw.Elapsed.TotalMilliseconds);
string result = wc1.DownloadString(new Uri(uriString));
Console.WriteLine("Call {0} completed: {1} ms ", id, sw.Elapsed.TotalMilliseconds);
return result.Length;
}
private void CountToALargerNumber(int id, int value)
{
for (long i = 0; i < value; i++) ;
Console.WriteLine("Endcounting {0}: {1} ms ",id,sw.Elapsed.TotalMilliseconds);
}
}
private void CountToALargerNumber(int id, int value)
{
for (long i = 0; i < value; i++) ;
Console.WriteLine("Endcounting {0}: {1} ms ",id,sw.Elapsed.TotalMilliseconds);
}
}
class Program
{
{
static void Main(string[] args)
{
{
MyDownloadString ds = new MyDownloadString();
ds.DoRun();
Console.ReadKey();
ds.DoRun();
Console.ReadKey();
}
}
}
}
}
-------------------------------------------------------
使用异步之后
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Diagnostics;
using System.Net;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Diagnostics;
using System.Net;
using System.Threading.Tasks;
namespace ConsoleApp1
{
{
class MyDownloadString
{
Stopwatch sw = new Stopwatch();
{
Stopwatch sw = new Stopwatch();
public void DoRun()
{
const int LargeNumber = 6000000;
sw.Start(); //秒表开始记时
Task< int> t1 = CountCharacters(1, "http://www.163.com"); //Task 类型占位符对象,计划进行的工作,并且最终将返回int; 开始之后会立即执行下面的代码;
Task t2 = CountCharacters(2, "http://www.baidu.com");// 在上一个方法计算过程中,这一个过程也立即开始了。
CountToALargerNumber(1, LargeNumber); //调用4次方法;每次结束时,读取秒表时间
CountToALargerNumber(2, LargeNumber);
CountToALargerNumber(3, LargeNumber);
CountToALargerNumber(4, LargeNumber);
{
const int LargeNumber = 6000000;
sw.Start(); //秒表开始记时
Task< int> t1 = CountCharacters(1, "http://www.163.com"); //Task
Task
CountToALargerNumber(1, LargeNumber); //调用4次方法;每次结束时,读取秒表时间
CountToALargerNumber(2, LargeNumber);
CountToALargerNumber(3, LargeNumber);
CountToALargerNumber(4, LargeNumber);
Console.WriteLine("Chars in www.163.com is {0}",t1.Result);//从CountCharacters中获取结果后,显示,如果没有回应,会继等待
Console.WriteLine("Chars in www.baidu.com is "+t2.Result );
}
private async Task CountCharacters(int id,string uriString)
{
WebClient wc1 = new WebClient();
Console.WriteLine("Chars in www.baidu.com is "+t2.Result );
}
private async Task
{
WebClient wc1 = new WebClient();
Console.WriteLine("Starting call {0}: {1} ms",id,sw.Elapsed.TotalMilliseconds);
string result =await wc1.DownloadStringTaskAsync(new Uri(uriString)); //此处await, 代表此代码是可以等待的;await 用来指定哪些方法是可以异步的
Console.WriteLine("Call {0} completed: {1} ms ", id, sw.Elapsed.TotalMilliseconds);
string result =await wc1.DownloadStringTaskAsync(new Uri(uriString)); //此处await, 代表此代码是可以等待的;await 用来指定哪些方法是可以异步的
Console.WriteLine("Call {0} completed: {1} ms ", id, sw.Elapsed.TotalMilliseconds);
return result.Length;
}
private void CountToALargerNumber(int id, int value)
{
for (long i = 0; i < value; i++) ;
Console.WriteLine("Endcounting {0}: {1} ms ",id,sw.Elapsed.TotalMilliseconds);
}
}
private void CountToALargerNumber(int id, int value)
{
for (long i = 0; i < value; i++) ;
Console.WriteLine("Endcounting {0}: {1} ms ",id,sw.Elapsed.TotalMilliseconds);
}
}
class Program
{
{
static void Main(string[] args)
{
{
MyDownloadString ds = new MyDownloadString();
ds.DoRun();
Console.ReadKey();
ds.DoRun();
Console.ReadKey();
}
}
}
}
}