相关疑难解决方法(0)

C#5异步/等待 - 是*并发*?

我一直在考虑C#5中新的异步内容,并提出了一个特别的问题.

我知道await关键字是一个简洁的编译器技巧/语法糖来实现连续传递,其中方法的其余部分被分解为Task对象并排队以按顺序运行,但是控制返回到调用方法.

我的问题是,我听说目前这一切都在一个线程上.这是否意味着这种异步内容实际上只是将连续代码转换为Task对象然后Application.DoEvents()在每个任务完成之后调用,然后再开始下一个任务?

或者我错过了什么?(问题的这一部分是修辞 - 我完全清楚我错过了什么 :))

c# continuations async-await

57
推荐指数
2
解决办法
9075
查看次数

当我"等待"一个"异步"方法时它会变成同步吗?

所以这是场景:

static async void Main(string[] args) 
{
    await AnAsyncMethod();
}

private static async task<bool> AnAsyncMethod()
{
    var x = await someAsyncMethod();
    var y = await someOtherAsyncMethod();

    return x == y;
}
Run Code Online (Sandbox Code Playgroud)

"someAsyncMethod"和"someOtherAsyncMethod"是否同步运行,因为我们正在使用await,或者它们是否按照执行顺序异步运行?

UPDATE

鉴于以下答案说明等待的异步方法将按顺序运行,如果我们只是停止执行并等待那些方法的返回值,那么首先使这些方法调用异步的目的是什么?我曾经看过过去的原生应用程序使用await/async作为释放UI线程的方法,但是有没有其他原因可以解释为什么这个设计是可取的呢?

c# asynchronous async-await

22
推荐指数
1
解决办法
4039
查看次数

标签 统计

async-await ×2

c# ×2

asynchronous ×1

continuations ×1