【发布时间】:2016-07-22 20:59:56
【问题描述】:
(如果问题的某些部分/部分被认为“太基本”,我提前道歉。我已经完成了关于 async-await 的研究,但对我来说这不是一个容易掌握的概念。要么或者我没有找到合适的资源。)
我一直读到(或者我是这么解释的)“使异步调用同步的方法是将 'await' 放在它前面”。
所以这个语句产生的代码如下简单代码所示:
// CODE 1:
public void async MyFunction()
{
await SomeFunctionAsync();
}
即:1) 将await 放在Async 函数的前面,2) 将async 放在你的函数中,因为现在它包含一个await。
但根据我的经验,有时会表现得有点“有趣”。我注意到的症状是,有时它的行为就像一个不受我控制的线程。
所以第一个问题是:当你调用MyFunction()并且这个函数包含async关键字时会发生什么?我的理解是(令人困惑)它不应该被称为MyFunctionAsync(),因为它是为返回Task的函数保留的。
...所以我想出的替代方案(似乎始终像同步类一样)是这种类型的代码:
// CODE 2:
public void MyFunction()
{
var task = SomeFunctionAsync();
Task.WaitAll(task);
}
第二个问题:有人可以解释CODE 2 的缺点(如果有的话)吗?
另外,隐含的问题是我有兴趣了解我对异步等待模式可能有的任何误解。
【问题讨论】:
-
“当你调用 MyFunction() 并且这个函数包含 async 关键字时会发生什么?”它将异步执行,但您不能等待它,因为它不返回任务。这就是为什么它似乎摆脱了你的控制。回答您的第二个问题,请参阅stackoverflow.com/questions/9343594/…
标签: c# async-await