我正在学习C#异步,并试图准确理解制作方法异步的效果。
如果我有以下方法(非异步):
public bool method()
{
int a = 2 + 1; //line 1
string b = "test"; //line 2
double c = 2.14; //line 3
return true; //line 4
}
在上面的方法中,编译器将按顺序执行每一行,例如,首先它将执行第1行,然后执行第2行等
我的问题涉及对执行顺序的影响,即添加异步,如下所示。
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
}
是否添加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;
}
然后在我看来,编译器将执行第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;
}
在我看来,编译器将同时执行第1行和第2行,然后一旦完成它将执行第3行,然后一旦完成它将执行第4行,然后一旦第4行完成它将执行行同时5和6?
我无法找到任何有关我的详细信息,所以如果有人有任何好的文章可以清楚地解释这一点,我将不胜感激。
答案 0 :(得分:4)
async
没有&#34;并行化&#34;方法。该方法仍然使用常规流程。
相反async
启用await
关键字。使用await
可以推迟方法的执行,直到等待方法完成。
优点是,在此期间其他代码可以运行 - await不会阻塞线程。
修改强>
您将await
主要用于IO绑定调用,例如数据库或Web服务(以及调用异步方法的任何方法)。而#34;那个其他系统&#34;正在处理您的请求,您自己的应用程序不需要阻止,但可以在您等待&#34;等待&#34;结果。当其他系统返回结果时,您的方法将继续处理。