順序執行異步
class Program
{
static void Main(string[] args)
{
new MyClass();
Console.Read();
}
}
public class MyClass
{
public MyClass()
{
Console.WriteLine(String.Format("MyClass() Start. 時間:{0}", DateTime.Now.ToString(CultureInfo.InvariantCulture)));
DisplayValue();
Console.WriteLine(String.Format("MyClass() End. 時間:{0}", DateTime.Now.ToString(CultureInfo.InvariantCulture)));
}
public Task<double> GetValueAsync(double num1, double num2)
{
return Task.Run(() =>
{
for (int i = 0; i < 1000000; i++)
{
num1 = num1 / num2;
}
return num1;
});
}
public void DisplayValue()
{
double result = GetValueAsync(1234.5, 1.01).Result ;
System.Threading.Thread.Sleep(5000);
Console.WriteLine(String.Format("Value is : {0} 時間:{1}",result,DateTime.Now.ToString(CultureInfo.InvariantCulture)));
}
}async
異步執行線程
class Program
{
static void Main(string[] args)
{
new MyClass();
Console.Read();
}
}
public class MyClass
{
public MyClass()
{
Console.WriteLine(String.Format("MyClass() Start. 時間:{0}", DateTime.Now.ToString(CultureInfo.InvariantCulture)));
DisplayValue(); //這裏不會阻塞
Console.WriteLine(String.Format("MyClass() End. 時間:{0}", DateTime.Now.ToString(CultureInfo.InvariantCulture)));
}
public Task<double> GetValueAsync(double num1, double num2)
{
return Task.Run(() =>
{
for (int i = 0; i < 1000000; i++)
{
num1 = num1 / num2;
}
return num1;
});
}
public async void DisplayValue()
{
double result = await GetValueAsync(1234.5, 1.01);//此處會開新線程處理GetValueAsync任務,而後方法立刻返回
//這以後的全部代碼都會被封裝成委託,在GetValueAsync任務完成時調用
System.Threading.Thread.Sleep(5000);
Console.WriteLine(String.Format("Value is : {0} 時間:{1}",result,DateTime.Now.ToString(CultureInfo.InvariantCulture)));
}
}orm