Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
COM-objecten kunnen asynchrone aanroepen ondersteunen. Wanneer een client een asynchrone aanroep doet, keert het besturingselement onmiddellijk terug naar de client. Terwijl de server de aanroep verwerkt, is de client vrij om ander werk te doen. Wanneer de client niet meer verder kan gaan zonder de resultaten van de aanroep, kan deze de resultaten van de aanroep op dat moment ophalen.
Een aanvraag voor een grote of complexe recordset kan bijvoorbeeld tijdrovend zijn. Een client kan de recordset aanvragen door een asynchrone aanroep en vervolgens ander werk doen. Wanneer de recordset beschikbaar is, kan de client deze snel verkrijgen zonder te blokkeren.
Clients maken geen asynchrone aanroepen rechtstreeks op het serverobject. In plaats daarvan verkrijgen ze een aanroepobject dat een asynchrone versie van een synchrone interface op het serverobject implementeert. De asynchrone interface van het aanroepobject heeft een naam van het formulier AsyncInterfaceName. Als een serverobject bijvoorbeeld een synchrone interface met de naam IMyInterface implementeert, is er een aanroepobject dat een asynchrone interface met de naam AsyncIMyInterface implementeert.
Notitie
Asynchrone ondersteuning is niet beschikbaar voor IDispatch- of voor interfaces die IDispatch-overnemen.
Serverobjecten die asynchrone aanroepen ondersteunen, implementeren de interface ICallFactory. Deze interface maakt één methode beschikbaar, CreateCall, waarmee een exemplaar van een opgegeven aanroepobject wordt gemaakt. Clients kunnen een query uitvoeren op ICallFactory- om te bepalen of een object asynchrone aanroepen ondersteunt.
Voor elke methode op een synchrone interface implementeert de bijbehorende asynchrone interface twee methoden. Met deze methoden worden de voorvoegsels Begin_ en Finish_ gekoppeld aan de naam van de synchrone methode. Als een interface met de naam ISimpleStream bijvoorbeeld een leesmethode heeft, heeft de AsyncISimpleStream-interface een Begin_Read en een Finish_Read methode. Om een asynchrone aanroep te starten, roept de client de methode Begin_ aan.
Wanneer u een serverobject implementeert, hoeft u geen aanroepobject op te geven voor elke interface die het object implementeert. Als het serverobject de ICallFactory-interface implementeert en standaard marshaling gebruikt, kan een marshaled-client altijd een proxyaanroepobject verkrijgen, zelfs als er geen aanroepobject aan de serverzijde staat. Deze proxy zal de Begin_ methode als synchrone aanroep verwerken, de server verwerkt de aanroep synchroon en de client kan de outparameters verkrijgen door de Finish_ methode aan te roepen.
Als een client daarentegen een gemarshalde synchrone aanroep maakt op een interface waarvoor er een aanroepobject aan de serverzijde staat, zal de server de aanroep altijd asynchroon verwerken. Dit gedrag is niet zichtbaar voor de client, omdat de client dezelfde outparameters ontvangt en dezelfde retourwaarde die het zou hebben ontvangen van de synchrone methode.
In beide gevallen wordt de interactie tussen client en server beheerd alsof de oproep synchroon verloopt: de output van synchrone en asynchrone proxy's is niet te onderscheiden, net als de uitvoer van de bijbehorende stubs. Dit gedrag vereenvoudigt het programmeermodel zowel van clients als van servers aanzienlijk. Als een serverobject ICallFactory-implementeert, hoeft een ge-marshalde client niet te proberen een aanroepobject te maken dat mogelijk niet beschikbaar is — er is voor de client altijd een aanroepobject beschikbaar.
Wanneer de client en server zich in hetzelfde appartement bevinden, verwerkt het serverobject de aanroep van de client. Als een aanroepobject niet beschikbaar is, moet de client expliciet de synchrone interface verkrijgen en een synchrone aanroep maken.
Zie de volgende onderwerpen voor meer informatie:
- Een Asynchrone Aanroep Maken
- een asynchrone aanroep annuleren
- Methode-aanroepen annuleren
- gesprekssynchronisatie