Asynchronous method invocation: Difference between revisions

Content deleted Content added
m change source to syntaxhighlight
Monkbot (talk | contribs)
m Task 17: replace deprecated: |last-author-amp= (2× replaced; usage: 2 of 3);
Line 47:
One can also pass a callback method to <code>BeginAccomplish</code>, to be invoked when the long-running method completes. It typically calls <code>EndAccomplish</code> to obtain the return value of the long-running method. A problem with the callback mechanism is that the callback function is naturally executed in the worker thread (rather than in the original calling thread), which may cause race conditions.<ref name="ms228972">{{cite web |url=http://msdn.microsoft.com/en-us/library/ms228972.aspx |title=Using an AsyncCallback Delegate to End an Asynchronous Operation |accessdate= 22 November 2008 |website=.NET Framework Developer's Guide |publisher=Microsoft Developer Network| archiveurl= https://web.archive.org/web/20081223205326/http://msdn.microsoft.com/en-us/library/ms228972.aspx| archivedate= 23 December 2008 | url-status= live}}</ref><ref name="Async.34.3#76161">{{cite web|url=http://www.zeroc.com/doc/Ice-3.2.1/manual/Async.34.3.html#76161 |title=Concurrency Issues |accessdate=22 November 2008 |website=Distributed Programming with Ice |publisher=ZeroC, Inc. |url-status=dead |archiveurl=https://web.archive.org/web/20080328070322/http://www.zeroc.com/doc/Ice-3.2.1/manual/Async.34.3.html |archivedate=28 March 2008 }}</ref>
 
In the .NET Framework documentation, the term event-based asynchronous pattern refers to an alternative API style (available since .NET 2.0) using a method named <code>AccomplishAsync</code> instead of <code>BeginAccomplish</code>.<ref name=nageletal>{{cite book|title=Professional C# 2008|url=https://archive.org/details/professionalcsha2008nage|url-access=limited|author1=Christian Nagel |author2=Bill Evjen |author3=Jay Glynn |author4=Karli Watson |author5=Morgan Skinner |lastname-authorlist-ampstyle=yesamp |pages=[https://archive.org/details/professionalcsha2008nage/page/n630 570]&ndash;571|publisher=Wiley|year=2008|isbn=9780470191378|chapter=Event-based Asynchronous Pattern}}</ref><ref name="hkasytyf">{{cite web |url=http://msdn.microsoft.com/en-us/library/hkasytyf.aspx |title=Multithreaded Programming with the Event-based Asynchronous Pattern |accessdate= 22 November 2008 |website=.NET Framework Developer's Guide |publisher=Microsoft Developer Network| archiveurl= https://web.archive.org/web/20081225175311/http://msdn.microsoft.com/en-us/library/hkasytyf.aspx| archivedate= 25 December 2008 | url-status= live}}</ref>
A superficial difference is that in this style the return value of the long-running method is passed directly to the callback method. Much more importantly, the API uses a special mechanism to run the callback method (which resides in an event object of type <code>AccomplishCompleted</code>) in the same thread in which <code>BeginAccomplish</code> was called. This eliminates the danger of race conditions, making the API easier to use and suitable for software components; on the other hand this implementation of the pattern comes with additional object creation and synchronization overhead.<ref name="ms228966">{{cite web |url=http://msdn.microsoft.com/en-us/library/ms228966.aspx |title=Deciding When to Implement the Event-based Asynchronous Pattern |accessdate= 22 November 2008 |website=.NET Framework Developer's Guide |publisher=Microsoft Developer Network| archiveurl= https://web.archive.org/web/20081122092048/http://msdn.microsoft.com/en-us/library/ms228966.aspx| archivedate= 22 November 2008 | url-status= live}}</ref>
 
Line 54:
 
== Further reading ==
* {{cite book|title=Programming WPF|url=https://archive.org/details/programmingwpfbu00sell|url-access=limited|author1=Chris Sells |author2=Ian Griffiths |lastauthorampname-list-style=yesamp |chapter=Appendix C.3: The Event-Based Asynchronous Pattern|pages=[https://archive.org/details/programmingwpfbu00sell/page/n773 747]&ndash;749|publisher=O'Reilly|year=2007|isbn=9780596510374}}
* [http://articles.techrepublic.com.com/5100-10878_11-1044325.html Using asynchronous method calls in C#]