延遲在某些網路作業中固有。 由於此延遲,迷你埠驅動程式所提供的許多上層函式和通訊協定驅動程式的下層函式都是設計來支援非同步操作。 與其在迴圈中等待耗時的任務完成或硬體事件發出訊號而浪費 CPU 週期,網路驅動程式依賴的是以異步方式處理大多數操作的能力。
使用 完成函式 來支援網路異步 I/O。 下列範例說明針對網路 傳送 作業使用完成函式,但通訊協定或迷你埠驅動程式所執行之許多其他作業都存在這個相同的機制。
當通訊協定驅動程式呼叫 NDIS 以傳送封包時,導致呼叫 miniport 驅動程式的 MiniportSendNetBufferLists 函式時,miniport 驅動程式可以嘗試立即完成此要求,並傳回適當的狀態值作為結果。 針對同步作業,可能的回應有:NDIS_STATUS_SUCCESS,表示成功完成傳送;NDIS_STATUS_RESOURCES,以及指出某種失敗的NDIS_STATUS_FAILURE。
但是傳送作業可能需要一些時間才能完成,而迷你埠驅動程式 (或 NDIS) 會將封包排入佇列,並等候 NIC 指出傳送作業的結果。 miniport 驅動程式 MiniportSendNetBufferLists 函式可以藉由傳回狀態值 NDIS_STATUS_PENDING,以異步方式來處理這項作業。 當迷你埠驅動程式完成傳送作業時,它會呼叫完成函式,NdisMSendNetBufferListsComplete,並將指標傳遞至已傳送的封包描述元。 此資訊會傳遞至通訊協議驅動程式,表示完成。
大部分驅動程序作業,可能需要較長時間來完成,它們支援使用類似的完成函式進行異步操作。 這類函式的名稱 NdisMXxxComplete。
完成函式也會提供給:
設定與查詢組態。
重設硬體。
指出狀態。
指出已接收的數據。
傳輸已接收的數據。