Beendigung asynchroner Vorgänge

Wenn eine Anwendung die funktion lineClose mit einem oder mehreren ausstehenden asynchronen Vorgängen aufruft, kann TAPI den Dienstanbieter anweisen, asynchrone Vorgänge zu beenden, die einem Aufruf zugeordnet sind. Dies hängt davon ab, ob die Anwendung der einzige Besitzer des Aufrufs ist und über das einzige Handle für den Aufruf verfügt.

Wenn die Anwendung der einzige Besitzer eines Aufrufs ist, ruft TAPI tspi _ lineDropOnClose oder TSPI _ lineDrop (je nach Anbieter) für jeden solchen Aufruf auf. Der Dienstanbieter sollte alle ausstehenden asynchronen Vorgänge überprüfen, die dem gelöschten Aufruf zugeordnet sind. Wenn ein ausstehender Vorgang vorhanden ist, sollte der Dienstanbieter die entsprechende Aktion ergreifen und möglicherweise den laufenden Vorgang beenden.

Wenn die Anwendung über das einzige Handle für einen Aufruf verfügt (d. h., es gibt keine anderen Besitzer oder Monitore), ruft TAPI die _ TSPI-Funktion lineCloseCall auf. Der Dienstanbieter muss diesen Aufruf als absoluten Hinweis darauf betrachten, dass ausstehende asynchrone Vorgänge abgebrochen werden müssen. Der Dienstanbieter muss einen ordnungsgemäßen Abschluss des Aufrufs sicherstellen und die ASYNC _ COMPLETION-Rückruffunktion für alle ausstehenden asynchronen Vorgänge aufrufen, wobei der FEHLERWERT LINEERR _ OPERATIONFAILED angegeben wird. Wenn TAPI zuvor die _ TSPI-Funktion lineDropOnClose oder TSPI _ lineDrop aufgerufen hat, ruft sie TSPI _ lineCloseCall sofort auf, nachdem der Dienstanbieter vom anderen Aufruf zurückgegeben wurde. Er wartet nicht auf den Abschluss des asynchronen Vorgangs, der der TSPI _ lineDrop-Funktion zugeordnet ist.

Wenn die Anwendung nicht der einzige Besitzer des Aufrufs ist, ruft TAPI tspi _ lineDropOnClose oder TSPI _ lineDropnicht auf. Wenn die Anwendung nicht über das einzige Handle für den Aufruf verfügt, ruft TAPI die _ TSPI-Funktion lineCloseCall nicht auf. Wenn die Anwendung weder der einzige Besitzer noch der einzige Besitzer eines Handles für den Aufruf ist, sendet TAPI keine Benachrichtigung an den Dienstanbieter. Daher bleiben alle ausstehenden asynchronen Vorgänge intakt. Dies bedeutet, dass solche Anwendungen keine asynchronen Vorgänge beenden können, die sie mithilfe der funktion lineClose gestartet haben. Da jedoch jeder asynchrone Vorgang erfordert, dass die aufrufende Anwendung besitzer des Aufrufs ist, ist die Wahrscheinlichkeit sehr selten, dass eine Anwendung asynchrone Vorgänge nicht beenden kann. In diesem Fall müssen die anderen Besitzer der Aufrufe die Verantwortung für die Disposition der Aufrufe übernehmen.

Wenn TAPI TSPI _ lineDropOnClose oder TSPI _ lineDropaufruft, muss der Dienstanbieter schließlich eine LINECALLSTATE _ IDLE-Nachricht für den zugeordneten Aufruf senden (es sei denn, TSPI _ lineCloseCall wird zuerst aufgerufen), damit Monitore beim Aufruf bereinigt werden können. Wenn der letzte Monitor die Funktion lineDeallocateCall aufgerufen hat, ruft TAPI die _ TSPI-Funktion lineCloseCall auf. Alle ausstehenden Vorgänge müssen abgeschlossen oder beendet und ASYNC _ COMPLETION aufgerufen werden, wie weiter oben beschrieben.