C# 关于asyns await Task.Run(()=>{ })
#region Task.Run() 使用样例
public void TaskTest()
{
Task.Run(async () =>
{
await GetTask(DateTime.Now,DateTime.Now);
});
}
public async Task<bool> GetTask(DateTime startDate, DateTime endDate)
{
return await Task.FromResult(true);
}
#endregion
/// <summary>
/// 执行一个耗时操作
/// </summary>
private async static void Do()
{
//基本只有 IO/Web请求 会比较耗时,原因是他们会有大量数据从磁盘获取
Console.WriteLine("Do Executing!!!! Current Thread Id: " + Thread.CurrentThread.ManagedThreadId);
// 模拟一个耗时操作:
Thread.Sleep(3000);
//await 找到一个人来帮忙做 比较麻烦的事件
//一个 await 就是额外开一个线程
await Task.Run(()=> {
Thread.Sleep(3000);
});
await Task.Delay(3000);//异步延迟 3000 毫秒
//访问 GitHub
HttpClient client = new HttpClient(); //WebClient 已经被淘汰了,现在大家更热衷于使用 HttpClient
// WebRequest 也可以使用
var res = await client.GetStringAsync("https://github.com");
#region 以下等效于上一句
var res1 = client.GetStringAsync("https://github.com");
res1.Wait();
string result=res1.Result;
#endregion
Console.WriteLine("Do Executing!!!! Current Thread Id: " + Thread.CurrentThread.ManagedThreadId);
}
记录一个关于线程池的用法
static async System.Threading.Tasks.Task Main(string[] args)
{
try
{
ThreadPool.QueueUserWorkItem(new WaitCallback(Calculate), 1000);
Console.WriteLine("Hello World!");
Console.ReadKey();
}
catch (Exception ex)
{
}
}
static void Calculate(object num)
{
int sum = 0;
int n = (int)num;
for (int i = 1; i <= n; i++)
{
sum += i;
}
Console.WriteLine("1到" + n + "的总和是:" + sum);
Console.WriteLine($"Calculate方法线程ID:{Thread.CurrentThread.ManagedThreadId.ToString()};当前时间:【{DateTime.Now}】");
}