Click here to Skip to main content
12,760,662 members (33,553 online)
Click here to Skip to main content
Add your own
alternative version


16 bookmarked
Posted 4 Jan 2008

Type-Strong Asynchronous Execution

, 5 Jan 2008 CPOL
Rate this:
Please Sign up or sign in to vote.
Executing a method asynchronously with typed parameters.


This static class allows the programmer to run a method asynchronously with a single line of code with typed arguments.


Sometimes, a programmer just want some work to be done in the background, and the .NET framework provides several ways of doing just that. You can start a thread and make it call a function, or you can use the ThreadPool.QueueUserWorkItem, but I always felt it was kind of messy. Using ThreadPool forces you to use a WaitCallback delegate if you want to specify any parameters, these need to be boxed into an object and unboxed in the WaitCallback function called.

So, what I wanted was a simple function to call, Util.RunAsync(function, arg1,arg2,arg3...), in a sort of fire and forget way.

Using the Code

The static class Util contains an overloaded function called RunAsync. It is used as such:

public static void Main(string[] args)
    string someString = "Hello There";
    int someInteger = 42;
    DateTime someTime = DateTime.Now;

    Util.RunAsync(Function1, someString, someInteger, someTime);

public static void Function1(string aString, int anInteger, DateTime time)
    Console.WriteLine("{0} {1} {2}", aString, anInteger, time);

Points of Interest

The functionality is achieved using the ThreadPool.QueueUserWorkItem the function, and its arguments are wrapped in an ActionJob object that has a subclass for each amount of arguments usable with Util.RunSync. Because it is based on the Action delegate and the generic versions of it Action<T>, Action<T,V>, Action<T,V,X>, and Action<T,V,X,Y>, it can only execute functions with at most four arguments.

You should be able to change the code to work as a Work Queue for invoking with Windows Forms. Instead of running ThreadPool.QueueUserWorkItem, you could do something like this:

public static void DoInvoke<T, V, X, Y>(
              this System.Windows.Forms.Control control, 
              Action<T, V, X, Y> function, T a, V b, X c, Y d)
    if (control.InvokeRequired)
        control.Invoke(function, a, b, c, d);
        function(a, b, c, d);


That's it. I like this little convenience, and I hope you do too :)


  • 5 January 2008: Article submitted.


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Jacob Korsgaard
Other Aalborg University
Denmark Denmark
Jacob is a Computer Science student at Aalborg University Denmark.

He has a special interest in Object Oriented and Managed programming languages such as Java and especially C#.

Jacob has been developing software professionally and for fun in his spare time for more than 7 years during his studies.

You may also be interested in...


Comments and Discussions

QuestionError: Using the generic type 'System.Action<t>' requires '1' type arguments</t> Pin
CoderJ19-Feb-08 3:04
memberCoderJ19-Feb-08 3:04 
GeneralRe: Error: Using the generic type 'System.Action' requires '1' type arguments Pin
Jacob Korsgaard19-Feb-08 4:26
memberJacob Korsgaard19-Feb-08 4:26 
GeneralRe: Error: Using the generic type 'System.Action' requires '1' type arguments Pin
CoderJ19-Feb-08 4:49
memberCoderJ19-Feb-08 4:49 
GeneralRe: Error: Using the generic type 'System.Action' requires '1' type arguments Pin
ml_black24-Feb-10 8:22
memberml_black24-Feb-10 8:22 
QuestionAn easier way? Pin
Henrik Jonsson7-Jan-08 8:51
memberHenrik Jonsson7-Jan-08 8:51 
AnswerRe: An easier way? Pin
FeLiZk8-Jan-08 1:27
memberFeLiZk8-Jan-08 1:27 
GeneralRe: An easier way? Pin
Henrik Jonsson10-Jan-08 9:47
memberHenrik Jonsson10-Jan-08 9:47 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.170217.1 | Last Updated 5 Jan 2008
Article Copyright 2008 by Jacob Korsgaard
Everything else Copyright © CodeProject, 1999-2017
Layout: fixed | fluid