This project is read-only.



It is often necessary to introduce concurrency into an application. The main reasons for this are:
  • Device I/O - inherently concurrent requiring separate thread(s) to handle
  • Responsiveness - don't want to freeze a UI while something happens
  • Throughput - need to make use of multiple cores to achieve required performance
  • Latency - need to respond to high priority events in the shortest possible time
Programming with multiple threads is trickier than single-threaded development because multiple threads must be created and synchronized in such a way that the following issues are avoided:
  • Deadlocks - threads block forever waiting for access to each others' resources
  • Race conditions - multiple threads updating the same data without arbitration produce random results
  • Dead time - CPU cores become inactive because of inefficient thread blocking
  • Excessive resource usage - excessive numbers of threads can eat up memory and CPU resources
Invocation in a single-threaded application is just a function call. Invocation in a multi-threaded application across a thread boundary involves synchronizing data and scheduling execution. Ensuring that this code is 100% correct can be tricky and subsequent changes can easily introduce errors that may not be detected for some time.

The MTF.NET runtime takes care of cross-thread invocation and task scheduling so that you can focus on coding features instead of infrastructure.

The MTF.NET runtime is easiest to use when combined with the Managed Task Framework.NET Professional visual editor (Visual Studio 2010 extension). The MTF.NET team are committed to continuously improving the core MTF.NET runtime and ensuring it is always available free and open source.

To find out more about the Managed Task Framework.NET Professional Visual Studio 2010 extension please see

Last edited Sep 30, 2012 at 7:58 AM by jaorme, version 16