110,539
社区成员
发帖
与我相关
我的任务
分享
static int ces()
{
Thread.Sleep(100);//模拟程序耗时
Console.WriteLine("子线程");
return 2;
}
static async Task<int> ces2()
{
return await Task.Run(() =>
{
Thread.Sleep(100);//模拟程序耗时
Console.WriteLine("子线程");
return 2;
});
}
static void Main(string[] args)
{
DateTime st = DateTime.Now;
Console.WriteLine("主线程开始");
//int r=Task.Run(()=> ces()).Result;
Task<int> task = ces2();
int r = task.Result;
Console.WriteLine("主线程结束");
Console.WriteLine("用时"+r+"_"+ + (DateTime.Now - st).TotalMilliseconds);
}
static void Main(string[] args)
{
Console.WriteLine("开始");
Task<int> t = Test1();
int a = t.Result;
Test1();
Console.WriteLine("结束");
Console.ReadLine();
}
static async Task<int> Test1()
{
await Task.Delay(500);
Console.WriteLine("2");
return 2;
}
using System;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static async Task<int> ces2()
{
return await Task.Run(() =>
{
Thread.Sleep(100);//模拟程序耗时
Console.WriteLine("子线程");
return 2;
});
}
static async void test()
{
Console.WriteLine("结果是{0}", await ces2());
}
static void Main(string[] args)
{
DateTime st = DateTime.Now;
Console.WriteLine("主线程开始");
test();
Console.WriteLine("主线程结束。按任意键结束......");
Console.ReadKey();
}
}
}
using System;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static async Task<int> ces2()
{
await Task.Delay(100);
Console.WriteLine("子线程");
return 2;
}
static async void test()
{
Console.WriteLine("结果是{0}", await ces2());
}
static void Main(string[] args)
{
DateTime st = DateTime.Now;
Console.WriteLine("主线程开始");
test();
Console.WriteLine("主线程结束。按任意键结束......");
Console.ReadKey();
}
}
}
task.Result
这类代码只有“不得已”的时候才写。使用一个异步编程框架但是写成同步阻塞代码,本身是很 low 的事情,所以有这个同步阻塞功能,那是给初学者用的。而你设计异步多线程并发算法时,如果你的思路是异步多线程并发的,你就会用好 Task 的异步能力,而不会用烂 Task。