C# 中可以利用 async
定義一個會進行非阻塞等待的函數,函數內部用 await Task.Run<TResult>(function)
來實現非阻塞等待,運行到 await
時,這個函數(所在的線程)會放棄控制權,然後當 function
返回後,再繼續執行。
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace ConsoleApp1
{
class LearnAsync
{
public static async void AsynchronizedCalculation(double a, double b)
{
Thread.Sleep(1000);
Console.WriteLine("Holy shit! ");
// 到這裏是阻塞運行
double result = await Task.Run<double>(() => { Thread.Sleep(1000); return 1; });
// 通過 Task.Run<TResult> 定義一個需要異步完成的任務,await 表示非阻塞地等待這個 Task ,await 開始不再阻塞
Console.WriteLine("result = " + result);
}
public static void Main()
{
AsynchronizedCalculation(100000000, 1.0001);
Console.WriteLine("Main ended");
Console.ReadKey();
}
}
}