IAsynchronousChannel 介面
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
一個支援非同步輸入輸出操作的通道。
[Android.Runtime.Register("java/nio/channels/AsynchronousChannel", "", "Java.Nio.Channels.IAsynchronousChannelInvoker", ApiSince=26)]
public interface IAsynchronousChannel : IDisposable, Java.Interop.IJavaPeerable, Java.Nio.Channels.IChannel
[<Android.Runtime.Register("java/nio/channels/AsynchronousChannel", "", "Java.Nio.Channels.IAsynchronousChannelInvoker", ApiSince=26)>]
type IAsynchronousChannel = interface
interface IChannel
interface ICloseable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 衍生
- 屬性
- 實作
備註
一個支援非同步輸入輸出操作的通道。 非同步 I/O 操作通常會採取兩種形式之一:
<李奧爾><>
{@link Future}<V> <em>operation</em>(<em>...</em>)
</李><莉>
void <em>operation</em>(<em>...</em> A attachment, {@link
CompletionHandler}<V,? super A> handler)
</li></ol>
其中 操作 是 I/O 操作的名稱(例如讀寫), V 是 I/O 操作的結果型別, A 是附加於 I/O 操作的物件類型,用於在使用結果時提供上下文。 此附加功能對於 <使用 em>無狀態</em>CompletionHandler 來處理多個 I/O 操作結果的情況非常重要。
在第一種形式中,介面定義 Future Future 的方法可用於檢查操作是否完成、等待完成,並取得結果。 在第二種形式中,當 I/O 操作完成或失敗時,會被呼叫 a CompletionHandler 來消耗結果。
實作此介面的通道為 <em>非同步閉合</em>:若通道上有未完成的 I/O 操作且已呼叫該通道 #close close 的方法,則該 I/O 操作在例外 AsynchronousCloseException情況下失敗。
非同步通道對多個並行執行緒來說是安全的。 部分通道實作可能支援並行讀寫,但可能不允許同時完成超過一次讀寫操作。
<h2>取消</h2>
介面 Future 定義 Future#cancel cancel 了取消執行的方法。 這會導致所有等待 I/O 操作結果的執行緒拋出 java.util.concurrent.CancellationException。 底層 I/O 操作是否能被取消,高度依賴實作,因此未明確規定。 當取消使通道或其連接實體處於不一致狀態時,通道會進入實作特定的 <em>錯誤狀態</em> ,阻止進一步嘗試 啟動類似被 取消操作的 I/O 操作。 例如,若讀取操作被取消,但實作無法保證通道中沒有位元組被讀取,則通道會進入錯誤狀態;進一步嘗試啟動操作 read 時,會拋出未指定的執行時例外。 同樣地,若寫入操作被取消,但實作無法保證沒有位元組寫入通道,則後續嘗試啟動 A write 會因未指定的執行時例外而失敗。
若 Future#cancel cancel 方法被呼叫時參數 mayInterruptIfRunning 設為 , true 則可透過關閉通道來中斷 I/O 操作。 此時,所有等待 I/O 操作結果的執行緒都會拋出 CancellationException ,通道上未完成的 I/O 操作則全部完成,唯獨 除外 AsynchronousCloseException。
若 cancel 呼叫該方法用於取消讀寫操作,建議丟棄所有用於 I/O 操作的緩衝區,或注意確保通道保持開啟時緩衝區不會被存取。
在 1.7 版本中加入。
Java 文件 java.nio.channels.AsynchronousChannel。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
屬性
| 名稱 | Description |
|---|---|
| Handle |
取得底層 Android 物件的 JNI 值。 (繼承來源 IJavaObject) |
| IsOpen |
如果此通道開啟,則回傳為真。 (繼承來源 IChannel) |
| JniIdentityHashCode |
回傳包裹實例的 |
| JniManagedPeerState |
管理貴族的狀況。 (繼承來源 IJavaPeerable) |
| JniObjectReferenceControlBlock |
一個支援非同步輸入輸出操作的通道。 (繼承來源 IJavaPeerable) |
| JniPeerMembers |
成員存取與召喚支援。 (繼承來源 IJavaPeerable) |
| PeerReference |
回傳JniObjectReference包裹後的 Java 物件實例。 (繼承來源 IJavaPeerable) |
方法
| 名稱 | Description |
|---|---|
| Close() |
關閉這個頻道。 |
| Disposed() |
當實例被處理後才被召喚。 (繼承來源 IJavaPeerable) |
| DisposeUnlessReferenced() |
如果沒有未解決的參考資料,則 |
| Finalized() |
當實例完成後才會被通知。 (繼承來源 IJavaPeerable) |
| SetJniIdentityHashCode(Int32) |
將回傳的值設為 |
| SetJniManagedPeerState(JniManagedPeerStates) |
一個支援非同步輸入輸出操作的通道。 (繼承來源 IJavaPeerable) |
| SetPeerReference(JniObjectReference) |
將回傳的值設為 |
| UnregisterFromRuntime() |
取消註冊此實例,讓執行時不會在未來 Java.Interop.JniRuntime+JniValueManager.PeekValue 的呼叫中回傳該實例。 (繼承來源 IJavaPeerable) |
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
一個支援非同步輸入輸出操作的通道。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |