C#异步的影响

时间:2017-01-03 11:01:06

标签: c# asynchronous

我正在学习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?

我无法找到任何有关我的详细信息,所以如果有人有任何好的文章可以清楚地解释这一点,我将不胜感激。

1 个答案:

答案 0 :(得分:4)

async没有&#34;并行化&#34;方法。该方法仍然使用常规流程。

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

修改
您将await主要用于IO绑定调用,例如数据库或Web服务(以及调用异步方法的任何方法)。而#34;那个其他系统&#34;正在处理您的请求,您自己的应用程序不需要阻止,但可以在您等待&#34;等待&#34;结果。当其他系统返回结果时,您的方法将继续处理。