C#async的影响

C#async的影响,c#,asynchronous,C#,Asynchronous,我正在学习C#async,并试图准确地理解使方法异步的效果 如果我有以下方法(非异步): 在上述方法中,编译器将按顺序执行每一行,例如,首先执行第1行,然后执行第2行等 我的问题与添加async对执行顺序的影响有关,如下所示 public async Task<bool> method() { int a = 2 + 1; //line 1 string b = "test"; //line 2 double c = 2.14; //l

我正在学习C#async,并试图准确地理解使方法异步的效果

如果我有以下方法(非异步):

在上述方法中,编译器将按顺序执行每一行,例如,首先执行第1行,然后执行第2行等

我的问题与添加async对执行顺序的影响有关,如下所示

public async Task<bool> method()
{
     int a = 2 + 1;      //line 1
     string b = "test";  //line 2
     double c = 2.14;    //line 3
     return true;        //line 4
}
公共异步任务方法()
{
int a=2+1;//第1行
string b=“test”//第2行
双c=2.14;//第3行
返回true;//第4行
}
是否添加async会导致编译器现在并发执行第1、2、3和4行

如果是,如果我这样做:

public async Task<bool> method()
{
     int a = await addNumbers(2, 1);      //line 1
     string b = "test";                   //line 2
     double c = 2.14;                     //line 3
     return true;                         //line 4
}

public async Task<int> addNumbers(int a, int b)
{         
     return a + b;
}
公共异步任务方法()
{
int a=await addNumbers(2,1);//第1行
string b=“test”//第2行
双c=2.14;//第3行
返回true;//第4行
}
公共异步任务地址号(int a、int b)
{         
返回a+b;
}
在我看来,编译器将执行第1行,一旦完成第1行,它将同时完成第2、3和4行。这是正确的吗

最后,如果上述情况也正确,在这种情况下

public async Task<bool> method()
{
     int a = 2 + 1;                       //line 1
     string b = "test";                   //line 2
     double c = await getDouble();        //line 3
     double d = await getDouble();        //line 4
     int e = 2 + 1;                       //line 5
     int f = 2 + 1;                       //line 6
     return true;                         //line 7
}

public async Task<double> getDouble()
{         
     return 2.14;
}
公共异步任务方法()
{
int a=2+1;//第1行
string b=“test”//第2行
double c=wait getDouble();//第3行
double d=wait getDouble();//第4行
int e=2+1;//第5行
int f=2+1;//第6行
返回true;//第7行
}
公共异步任务getDouble()
{         
回报率2.14;
}
在我看来,编译器将同时执行第1行和第2行,完成后将执行第3行,完成后将执行第4行,完成后将同时执行第5行和第6行


我还没能为我找到任何详细的信息,因此如果有人有任何好的文章能清楚地解释这一点,我将不胜感激。

async
不会“并行化”该方法。该方法仍然使用规则流

相反,
async
启用
wait
关键字。使用
await
可以推迟方法的执行,直到等待的方法完成。 优点是同时可以运行其他代码-wait不会阻塞线程

编辑

您将主要在IO绑定调用上使用
wait
,例如对数据库或Web服务的调用(以及任何调用异步方法的方法)。当“其他系统”正在处理您的请求时,您自己的应用程序不需要阻塞,但可以在“等待”结果的同时处理其他代码。当另一个系统返回结果时,您的方法将继续处理

你说的“同时”是什么意思?由于速度和多核或多线程,CPU看起来可能是这样的,但实际上一次只能做一件事。无论是否使用异步,代码仍然是按顺序执行的。异步(通常)与多线程无关。你走错了路。另外,编译此代码时请阅读警告。@CodeCaster您的意思是,即使我声明异步,代码仍然始终在同一线程上执行,并且不会导致方法并发运行?对于第二个代码块,您要求“同时执行第1、2、3和4行?”。不,它不会每行代码产生一个线程。再次,非常明确地解释一下“同时”是什么意思。我向谷歌建议,有很多关于
async/await
的好文章,以及编译器在web上对此做了什么。从目前的情况来看,这个问题对于这样的问答网站来说太广泛了,因为您的(多个)问题表明,要回答这个问题,您必须解释
async/await
的整个概念。
public async Task<bool> method()
{
     int a = 2 + 1;                       //line 1
     string b = "test";                   //line 2
     double c = await getDouble();        //line 3
     double d = await getDouble();        //line 4
     int e = 2 + 1;                       //line 5
     int f = 2 + 1;                       //line 6
     return true;                         //line 7
}

public async Task<double> getDouble()
{         
     return 2.14;
}