ICompletionStage 介面

定義

可能是非同步計算的一個階段,當另一個完結階段完成時執行動作或計算值。

[Android.Runtime.Register("java/util/concurrent/CompletionStage", "", "Java.Util.Concurrent.ICompletionStageInvoker", ApiSince=24)]
[Java.Interop.JavaTypeParameters(new System.String[] { "T" })]
public interface ICompletionStage : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/util/concurrent/CompletionStage", "", "Java.Util.Concurrent.ICompletionStageInvoker", ApiSince=24)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "T" })>]
type ICompletionStage = interface
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
衍生
屬性
實作

備註

可能是非同步計算的一個階段,當另一個完結階段完成時執行動作或計算值。 階段在其計算終止後完成,但這可能會觸發其他相依階段。 此介面中定義的功能僅有少數基本形式,並擴展成更廣泛的方法集合,以捕捉多種使用風格:

<UL>

<li>階段執行的計算可表示為函數(Function)、消費者(Consumer)或可執行(Runnable)(分別使用如 <em>apply</em>、<em>accept</em <>或 em>run</em> 等名稱),視是否需要參數及/或產生結果而定。 例如:

{@code
            stage.thenApply(x -> square(x))
                 .thenAccept(x -> System.out.print(x))
                 .thenRun(() -> System.out.println());}

另一種形式(<em>compose</em>)允許從返回完備階段的函數構建計算管線。

任何對某階段計算的論證,都是觸發階段計算的結果。

<一個>階段的執行可能由完成單一階段、兩個階段的兩個階段,或兩個階段中的任一階段觸發。 單一階段的依賴性會以 em>then</em> 為前綴<的方法進行排列。 由兩階段完成<的 em<> 或 em> 兩階段觸發的,可能會<<>使用相應命名的方法結合/結合>其結果或效果。 由<兩個階段中任一<或 em> 觸發的 em>不保證哪個結果或效應用於相依階段的計算。

<階段>間的依賴性控制計算的觸發,但不保證任何特定的排序。 此外,新階段計算的執行方式可分為三種:預設執行、預設非同步執行(使用帶有 em async</em> 後綴<的方法,並利用該階段預設的非同步執行功能),或自訂(透過提供的 Executor)。> 預設模式與非同步模式的執行屬性由 CompletionStage 實作指定,而非此介面。 具有明確執行者參數的方法可能具有任意執行特性,甚至可能不支援並行執行,但處理方式會以符合非同步的方式進行。

<li>兩種方法形式(#handle handle#whenComplete whenComplete)支持無條件計算,無論觸發階段是否正常完成或例外完成。 此方法 #exceptionally exceptionally 僅在觸發階段異常完成時支援計算,並計算替換結果,類似 Java catch 關鍵字。 在其他所有情況下,若某階段的計算因(未檢查的)異常或錯誤突然終止,則所有需要完成的相依階段也將異常完成,且 CompletionException 該例外為其原因。 如果一個階段依賴 <於 em>兩個<階段的 em> ,且兩者都異常完成,則 CompletionException 可能對應於這兩個例外中的任一。 如果一個階段依賴 <於 em>或< em> 或 em 或其他兩個階段,且只有其中一個階段異常完成,則無法保證該依賴階段是正常完成還是異常完成。 以方法 whenComplete為例,當所提供的動作本身遇到例外時,該階段會以異常完成,除非來源階段也異常完成,此時來源階段的異常完成會被優先處理並傳遞至依賴階段。

</ul>

所有方法都遵循上述觸發、執行及特殊完成規範(這些規範在個別方法規範中不會重複)。 此外,對於接受完備結果的方法,用於傳遞完備結果(即型別T參數 )的參數可能是空,但若對其他參數傳入 null 值,則會導致拋出 。NullPointerException

方法形式 #handle handle 是建立續階段的最一般方式,無條件執行同時給定觸發 CompletionStage 結果與例外(若有)的計算,並計算任意結果。 此方法 #whenComplete whenComplete 類似,但保留觸發階段的結果,而非重新計算。 由於一個階段的正常結果可能為 null,這兩種方法的計算結構都應該是:

{@code (result, exception) -> {
              if (exception == null) {
                // triggering stage completed normally
              } else {
                // triggering stage completed exceptionally
              }
            }}

此介面未定義初始建立、強制正常或異常完成、探測完成狀態或結果,或等待階段完成的方法。 CompletionStage 的實作可依情況提供實現此類效果的手段。 方法 #toCompletableFuture 透過提供共通的轉換類型,使不同介面實作間的互通性成為可能。

新增於1.8版本。

Java 文件 java.util.concurrent.CompletionStage

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

屬性

名稱 Description
Handle

取得底層 Android 物件的 JNI 值。

(繼承來源 IJavaObject)
JniIdentityHashCode

回傳包裹實例的 java.lang.System.identityHashCode() 值。

(繼承來源 IJavaPeerable)
JniManagedPeerState

管理貴族的狀況。

(繼承來源 IJavaPeerable)
JniPeerMembers

成員存取與召喚支援。

(繼承來源 IJavaPeerable)
PeerReference

回傳JniObjectReference包裹後的 Java 物件實例。

(繼承來源 IJavaPeerable)

方法

名稱 Description
AcceptEither(ICompletionStage, IConsumer)

回傳一個新的完備階段,當該階段或另一個階段正常完成時,執行時會以相應結果作為所提供動作的參數。

AcceptEitherAsync(ICompletionStage, IConsumer, IExecutor)

回傳一個新的 CompletionStage,當該階段或其他指定階段正常完成時,會使用所提供的執行者執行,並以相應結果作為所提供動作的參數。

AcceptEitherAsync(ICompletionStage, IConsumer)

回傳一個新的 CompletionStage,當該階段或其他指定階段正常完成時,會使用該階段預設的非同步執行設施執行,並以相應結果作為所提供動作的參數。

ApplyToEither(ICompletionStage, IFunction)

回傳一個新的 CompletionStage,當該階段或另一個給定階段正常完成時,執行時會以相應結果作為所提供函式的參數。

ApplyToEitherAsync(ICompletionStage, IFunction, IExecutor)

回傳一個新的完備階段,當該階段或另一個給定階段正常完成時,會使用所提供的執行器執行,並以相應結果作為所提供函式的參數。

ApplyToEitherAsync(ICompletionStage, IFunction)

回傳一個新的 CompletionStage,當該階段或其他指定階段正常完成時,會使用該階段預設的非同步執行功能執行,並將相應結果作為所提供函式的參數。

Disposed()

當實例被處理後才被召喚。

(繼承來源 IJavaPeerable)
DisposeUnlessReferenced()

如果沒有未解決的參考資料,則 Dispose()呼叫;否則,則不做任何事。

(繼承來源 IJavaPeerable)
Exceptionally(IFunction)

回傳一個新的 CompletionStage,當此階段異常完成時,會以該階段的例外作為所提供函式的參數執行。

ExceptionallyAsync(IFunction, IExecutor)

回傳一個新的 CompletionStage,當該階段異常完成時,會以該階段的例外作為所提供函式的參數執行,並使用所提供的執行者執行。

ExceptionallyAsync(IFunction)

回傳一個新的 CompletionStage,當此階段異常完成時,會以該階段的例外作為所提供函式的參數執行,並使用該階段預設的非同步執行功能。

ExceptionallyCompose(IFunction)

回傳一個新的 CompletionStage,當此階段異常完成時,該階段會根據所提供函數對該階段例外的結果組合而成。

ExceptionallyComposeAsync(IFunction, IExecutor)

回傳一個新的 CompletionStage,當此階段異常完成時,該階段會利用所提供函式對該階段例外的結果組合,並使用所提供的執行者。

ExceptionallyComposeAsync(IFunction)

回傳一個新的 CompletionStage,當此階段異常完成時,該階段會利用該階段預設的非同步執行功能,將所提供函式的結果組合而成。

Finalized()

當實例完成後才會被通知。

(繼承來源 IJavaPeerable)
Handle(IBiFunction)

回傳一個新的 CompletionStage,當該階段正常或例外完成時,會以該階段的結果與例外作為所提供函式的參數執行。

HandleAsync(IBiFunction, IExecutor)

回傳一個新的 CompletionStage,當該階段正常或異常完成時,會使用所提供的執行器執行,並將該階段的結果與例外作為所提供函式的參數。

HandleAsync(IBiFunction)

回傳一個新的 CompletionStage,當該階段正常或異常完成時,會使用該階段預設的非同步執行設施執行,並將該階段的結果與例外作為所提供函式的參數。

RunAfterBoth(ICompletionStage, IRunnable)

回傳一個新的完成階段,當此階段與另一個給定階段都正常完成時,執行該動作。

RunAfterBothAsync(ICompletionStage, IRunnable, IExecutor)

回傳一個新的完成階段,當此階段與另一個指定階段皆正常完成時,會使用所提供的執行器執行該動作。

RunAfterBothAsync(ICompletionStage, IRunnable)

回傳一個新的完成階段,當此階段與另一個指定階段皆正常完成時,該階段會使用該階段預設的非同步執行機制執行該動作。

RunAfterEither(ICompletionStage, IRunnable)

回傳一個新的完成階段,當該階段或其他指定階段正常完成時,該階段執行該動作。

RunAfterEitherAsync(ICompletionStage, IRunnable, IExecutor)

回傳一個新的完備階段,當該階段或另一個階段正常完成時,該階段會使用所提供的執行者執行該動作。

RunAfterEitherAsync(ICompletionStage, IRunnable)

回傳一個新的完成階段,當該階段或另一個階段正常完成時,會使用該階段預設的非同步執行功能執行該動作。

SetJniIdentityHashCode(Int32)

將回傳的值設為 JniIdentityHashCode

(繼承來源 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

可能是非同步計算的一個階段,當另一個完結階段完成時執行動作或計算值。

(繼承來源 IJavaPeerable)
SetPeerReference(JniObjectReference)

將回傳的值設為 PeerReference

(繼承來源 IJavaPeerable)
ThenAccept(IConsumer)

回傳一個新的 CompletionStage,當該階段正常完成時,會以該階段的結果作為所提供動作的參數執行。

ThenAcceptAsync(IConsumer, IExecutor)

回傳一個新的 CompletionStage,當此階段正常完成時,會使用所提供的執行者執行,該階段的結果作為所提供動作的參數。

ThenAcceptAsync(IConsumer)

回傳一個新的 CompletionStage,當該階段正常完成時,會使用該階段預設的非同步執行機制執行,該階段的結果作為所提供動作的參數。

ThenAcceptBoth(ICompletionStage, IBiConsumer)

回傳一個新的 CompletionStage,當此階段與另一個指定階段皆正常完成時,會以兩個結果作為所提供動作的參數執行。

ThenAcceptBothAsync(ICompletionStage, IBiConsumer, IExecutor)

回傳一個新的 CompletionStage,當此階段與另一個給定階段皆正常完成時,會使用所提供的執行者執行,並將這兩個結果作為所提供動作的參數。

ThenAcceptBothAsync(ICompletionStage, IBiConsumer)

回傳一個新的 CompletionStage,當此階段與另一個指定階段皆正常完成時,會使用該階段預設的非同步執行設施執行,並將兩個結果作為所提供動作的參數。

ThenApply(IFunction)

回傳一個新的 CompletionStage,當該階段正常完成時,會以該階段的結果作為所提供函式的參數執行。

ThenApplyAsync(IFunction, IExecutor)

回傳一個新的 CompletionStage,當該階段正常完成時,會使用所提供的執行器執行,該階段的結果作為所提供函式的參數。

ThenApplyAsync(IFunction)

回傳一個新的 CompletionStage,當該階段正常完成時,會使用該階段預設的非同步執行機制執行,並以該階段的結果作為所提供函式的參數。

ThenCombine(ICompletionStage, IBiFunction)

回傳一個新的 CompletionStage,當此階段與另一個給定階段皆正常完成時,會以兩個結果作為所提供函式的參數執行。

ThenCombineAsync(ICompletionStage, IBiFunction, IExecutor)

回傳一個新的 CompletionStage,當此階段與另一個給定階段皆正常完成時,會使用所提供的執行器執行,並將這兩個結果作為所提供函式的參數。

ThenCombineAsync(ICompletionStage, IBiFunction)

回傳一個新的 CompletionStage,當此階段與另一個指定階段皆正常完成時,會使用該階段預設的非同步執行設施執行,並將兩個結果作為所提供函式的參數。

ThenCompose(IFunction)

回傳一個新的 CompletionStage,該 CompletionStage 已完成,值與該函式回傳的 Completion Stage 相同。

ThenComposeAsync(IFunction, IExecutor)

回傳一個新的 CompletionStage,該完成值與該函式回傳的 CompletionStage 相同,並由所提供的執行者執行。

ThenComposeAsync(IFunction)

回傳一個新的 CompletionStage,該階段的完成值與該函式回傳的 CompletionStage 相同,並使用該階段預設的非同步執行設施執行。

ThenRun(IRunnable)

回傳一個新的 CompletionStage,當該階段正常完成時,該階段會執行該動作。

ThenRunAsync(IRunnable, IExecutor)

回傳一個新的完成階段,當該階段正常完成時,會使用所提供的執行者執行該動作。

ThenRunAsync(IRunnable)

回傳一個新的 CompletionStage,當該階段正常完成時,會使用該階段預設的非同步執行機制執行該動作。

ToCompletableFuture()

回傳 a CompletableFuture 維持與此階段相同的完備性。

UnregisterFromRuntime()

取消註冊此實例,讓執行時不會在未來 Java.Interop.JniRuntime+JniValueManager.PeekValue 的呼叫中回傳該實例。

(繼承來源 IJavaPeerable)
WhenComplete(IBiConsumer)

回傳一個新的 CompletionStage,結果或例外與此階段相同,當該階段完成時執行該動作。

WhenCompleteAsync(IBiConsumer, IExecutor)

回傳一個新的 CompletionStage,結果或例外與此階段相同,當該階段完成時,該階段會使用提供的執行者執行該動作。

WhenCompleteAsync(IBiConsumer)

回傳一個新的 CompletionStage,結果或例外與此階段相同,並在此階段完成時使用該階段預設的非同步執行機制執行該動作。

擴充方法

名稱 Description
GetJniTypeName(IJavaPeerable)

取得實例 self類型的 JNI 名稱。

JavaAs<TResult>(IJavaPeerable)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

JavaCast<TResult>(IJavaObject)

執行 Android 執行時間檢查的類型轉換。

JavaCast<TResult>(IJavaObject)

可能是非同步計算的一個階段,當另一個完結階段完成時執行動作或計算值。

TryJavaCast<TResult>(IJavaPeerable, TResult)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

適用於