我正在学习 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
}
Run Code Online (Sandbox Code Playgroud)
上面的方法中,编译器会依次执行每一行,比如先执行第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
}
Run Code Online (Sandbox Code Playgroud)
添加 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;
}
Run Code Online (Sandbox Code Playgroud)
然后在我看来,编译器将执行第 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;
}
Run Code Online (Sandbox Code Playgroud)
在我看来,编译器将同时执行第 1 行和第 2 行,然后一旦完成它将执行第 3 行,然后一旦完成它将执行第 4 行,然后一旦第 4 行完成它将执行第 5 行和第 6 行同时?
我一直找不到任何可以为我清楚地详细说明这一点的内容,因此如果有人有任何好文章可以清楚地解释这一点,我们将不胜感激。
async不会“并行化”该方法。该方法仍然使用常规流程。
而是async启用await关键字。使用await可以推迟方法的执行,直到等待的方法完成。优点是在此期间其他代码可以运行 - await 不会阻塞线程。
编辑
您将await主要用于 IO 绑定调用,例如数据库或网络服务(以及调用异步方法的任何方法)。当“那个其他系统”正在处理您的请求时,您自己的应用程序不需要阻塞,但可以在您“等待”结果的同时处理其他代码。当其他系统返回结果时,您的方法会继续处理。
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |