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();
}
}
}