async await

順序執行異步

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

 

相關文章
相關標籤/搜索