2016-11-28 121 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