32 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			32 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
---
 | 
						|
layout: pattern
 | 
						|
title: Async Method Invocation
 | 
						|
folder: async-method-invocation
 | 
						|
permalink: /patterns/async-method-invocation/
 | 
						|
categories: Concurrency
 | 
						|
tags:
 | 
						|
 - Reactive
 | 
						|
---
 | 
						|
 | 
						|
## Intent
 | 
						|
Asynchronous method invocation is pattern where the calling thread
 | 
						|
is not blocked while waiting results of tasks. The pattern provides parallel
 | 
						|
processing of multiple independent tasks and retrieving the results via
 | 
						|
callbacks or waiting until everything is done. 
 | 
						|
 | 
						|
# Class diagram
 | 
						|

 | 
						|
 | 
						|
## Applicability
 | 
						|
Use async method invocation pattern when
 | 
						|
 | 
						|
* you have multiple independent tasks that can run in parallel
 | 
						|
* you need to improve the performance of a group of sequential tasks
 | 
						|
* you have limited amount of processing capacity or long running tasks and the
 | 
						|
  caller should not wait the tasks to be ready
 | 
						|
 | 
						|
## Real world examples
 | 
						|
 | 
						|
* [FutureTask](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/FutureTask.html), [CompletableFuture](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html) and [ExecutorService](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html) (Java)
 | 
						|
* [Task-based Asynchronous Pattern](https://msdn.microsoft.com/en-us/library/hh873175.aspx) (.NET)
 |