我听说等待是异步操作。但是,由于这是一个重要的概念,为什么我无法在MSDN上找到准确的定义?
我的问题不是如何编写async / await。我的问题是要了解这个概念。 MSDN的概念为async/await
,但没有awaitable
。
那么什么是等待的?如果是一项操作,包含哪些内容?
答案 0 :(得分:5)
最后我在Async/Await FAQ.
上找到了它“ awaitable ”是公开GetAwaiter方法的任何类型,该方法返回有效的“awaiter”。此GetAwaiter方法可以是实例方法(就像Task和Task< TResult>的情况一样),或者它可以是扩展方法。
“ awaiter ”是从等待的GetAwaiter方法返回的任何类型,并且符合特定模式。 awaiter必须实现System.Runtime.CompilerServices.INotifyCompletion接口,并且可以选择实现System.Runtime.CompilerServices.ICriticalNotifyCompletion接口。除了提供来自INotifyCompletion的OnCompleted方法的实现(以及可选地来自ICriticalNotifyCompletion的UnsafeOnCompleted方法)之外,awaiter还必须提供IsCompleted布尔属性以及无参数的GetResult方法。如果awaitable表示返回void的操作,则GetResult返回void;如果awaitable表示返回TResult的操作,则返回TResult。
答案 1 :(得分:0)
简单地说,一个等待的方法或函数是返回Task
或Task<T>
的方法或函数。它不返回数据类型,而是返回与该时间点正在运行的进程异步的进程。如果你有两个进程,A和B只允许在A完成后运行,B将是等待的方法,因为它会等到A完成,然后它才会返回它的指定任务。请注意,等待过程也可以返回void。这不是最清楚的解释,但在我学习的时候肯定对我有帮助。