前言
记录一下C#的一些东西,基础好多还是不会,还是推荐微软的官网文档,网上的博客写的都太水了,还是官网文档好一点
异步任务
同步方法的缺点
其实我最想讲的就是这个,我举个例子,有两个方法,方法1和方法2,我现在想先执行方法1再执行方法2,如果我顺序执行的话,那么必须等待方法1执行完成之后才执行方法2 代码如下
static void Main(string[] args)
{
method1();
method2();
}
public static void method1()
{
for (int i = 0; i < 80; i++)
{
System.Console.WriteLine("method1: "+i);
}
}
public static void method2() {
for (int i = 0; i < 20; i++)
{
System.Console.WriteLine("method2: "+i);
}
}
执行一下就知道了,必须等待方法1执行完才会执行方法2,就比如我想烧水做饭,必须先等水烧开了我才能洗菜切菜......这明明是可以同时做的事情,我们可以使用异步方法解决
异步方法
这个分为两种情况,I/O和CPU运算,我这里暂时没用到I/O所以不写了,讲讲CPU运算的
返回Task
static void Main(string[] args)
{
method1();
method2();
System.Console.ReadKey();
}
public static async Task method1()
{
await Task.Run(() =>
{
for (int i = 0; i < 80; i++)
{
System.Console.WriteLine("method1: " + i);
}
});
}
public static void method2() {
for (int i = 0; i < 20; i++)
{
System.Console.WriteLine("method2: "+i);
}
}
特点就是async,Task或者Task<T>
,await,Task.Run这几个
返回Task<T>
static void Main(string[] args)
{
callMethod();
System.Console.ReadKey();
}
public static async void callMethod()
{
Task<int> task = method1();
int count = await task;
method3(count);
}
public static async Task<int> method1()
{
int count=0;
await Task.Run(() =>
{
for (int i = 0; i < 80; i++)
{
System.Console.WriteLine("method1: " + i);
count++;
}
});
return count;
}
public static void method2()
{
for (int i = 0; i < 20; i++)
{
System.Console.WriteLine("method2: " + i);
}
}
public static void method3(int count)
{
System.Console.WriteLine("Count is "+count);
}