Asynchronous method invocation: Difference between revisions

Content deleted Content added
RHaworth (talk | contribs)
{{subst:prod|original research}}
Davhdavh (talk | contribs)
Nothing original about this. MS mentions it as a best practice of their Event-based Asynchronous Pattern.
Line 1:
The '''AsyncroniousAsynchronous error reporting''' [[design pattern]] decouples exception throwing from their origin to the use of the result, in such a way that exceptions happen in a "safe" way. Often used in connection with the [[Active Object]] pattern.
{{dated prod|concern = original research|month = October|day = 9|year = 2008|time = 04:20|timestamp = 20081009042002}}
 
<!-- Do not use the "dated prod" template directly; the above line is generated by "subst:prod|reason" -->
Recently seen implemented as a basic principle in [[Microsoft .NET]].<ref>Best Practices for Implementing the Event-based Asynchronous Pattern [http://msdn.microsoft.com/en-us/library/ms228974(VS.80).aspx "Under Errors and Exceptions"]</ref>
The '''Asyncronious error reporting''' [[design pattern]] decouples exception throwing from their origin to the use of the result, in such a way that exceptions happen in a "safe" way. Often used in connection with the [[Active Object]] pattern.
 
== C# example ==
 
<source lang="csharp">
 
public class SomethingCallbackResult
{
private object _result;
public object Result {
get {
//Exception is not thrown until we ask for result
if (_result is Exception)
throw (Exception)_result;
return _result;
}
set {
_result = value;
}
}
}
 
public class Something
{
public delegate void SomethingCallback(SomethingCallbackResult result);
 
public void BeginSomething(SomethingCallback callback)
{
//Start thread with worker
 
//return
}
 
private void worker(SomethingCallback callback)
{
SomethingCallbackResult result = new SomethingCallbackResult();
try
{
//... Actual work ...
result.Result = ...
}
catch (Exception e)
{
//Exception is not throw here, but just saved for later use
result.Result = e;
}
callback(result);
}
}
</source>