Pra*_*oir 3 .net c# entity-framework async-await c#-4.0
考虑一个异步(*Async/ async)函数,它被调用两次,一次调用,await没有它.
如果我使用await,它会等到执行异步函数然后执行下一行吗?
await db.SaveChangesAsync();
//Some code here
Run Code Online (Sandbox Code Playgroud)
并且,如果我不使用await,它会继续执行它下面的代码而不等待异步函数完成吗?
db.SaveChangesAsync();
//Some code here
Run Code Online (Sandbox Code Playgroud)
是的,我在这里或等待是功能强制性的async吗?
如果我使用await,它会等到
async函数执行后再执行下一行.
这取决于方法返回.它返回a Task[<T>],表示未来值.如果Task已经完成,它将保持同步运行.否则,将当前方法的剩余部分添加为continuation - 在异步部分报告完成时调用的委托回调.
在任何一种情况下,它都没有做的是在异步部分继续时阻塞调用线程.
并且,如果我不使用await,它将继续执行它下面的代码而无需等待
async函数完成.
是
...或等待功能时必须要么
async?
在调用它们时?不是强制性的,但它确实使事情变得方便.通常,这样的函数返回a Task[<T>],也可以通过不同的代码消耗.你可以使用.ContinueWith(...),.Wait,.Result等或者您也可以忽略Task完全.最后一个是个坏主意,因为异步函数的异常需要去某处:如果没有观察到异常,就会发生非常糟糕的事情.
但是,在编写它们时:如果你编写一个async方法并且await那里没有关键字,编译器会发出一个警告,表明你可能做错了.同样,不是严格强制性的,但强烈推荐.