2016-11-28 86 views
1

我听说awaitable是异步操作。但是,既然它是一个重要的概念,为什么我无法在MSDN上找到确切的定义?什么是等待?

我的问题不是如何写async/await。我的问题是要知道这个概念。 MSDN有概念async/await但没有awaitable

那么什么是候选人?如果是手术,包括哪些内容?

+1

https://msdn.microsoft.com/en-us/library/hh191443(v=vs.110).aspx – ColinM

+0

可能的复制\' async \'和\'await \'](http://stackoverflow.com/questions/14455293/how-and-when-to-use-async-and-await) – Igor

+1

它没有“awaitable”在文章中。 – Bigeyes

回答

1

最后我找到它Async/Await FAQ.

的“awaitable”是任何类型的公开,它返回一个有效的“awaiter”一GetAwaiter方法。这个GetAwaiter方法可能是一个实例方法(就像Task和Task一样),或者它可能是一个扩展方法。

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。

和[如何以及何时使用本link about awaitable and awaiter is helpful.

0

简而言之,等待的方法或功能是返回TaskTask<T>。它不返回数据类型,而是返回一个与那个时间点正在运行的进程不同步的进程。如果你有两个进程,A和B和B只允许在A完成后运行,那么B将是等待方法,因为它会等到A完成,然后才会返回它指定的任务。请注意,等待进程也可以返回void。这不是最清楚的解释,但是当我学习时,肯定帮助了我。

+0

由Evk4的评论。等待是一堂课。你是这么认为的吗? – Bigeyes