Using Tasks
Testing usage of Tasks today.
using System;
using System.Threading;
using System.Threading.Tasks;
namespace TestTasks
{
class TasksTester
{
private void LogMsg(string msg, params object[] args)
{
Console.Out.Write("{0} ThreadId={1} ",
DateTime.Now.ToString("HH:MM:ss.fff"),
Thread.CurrentThread.ManagedThreadId);
Console.Out.WriteLine(msg, args);
}
private void DoWork(object e)
{
LogMsg("Background worker starting");
float percentDone = 0.0f;
for (int i = 0; i < 10; i++)
{
Thread.Sleep(200);
percentDone += 10.0f;
}
LogMsg("Background worker completed");
AutoResetEvent ae = e as AutoResetEvent;
ae.Set();
}
// RunTest
//
// Function run by main thread
// Main thread sets up the background worker instance
// and fires it off
public void RunTest()
{
AutoResetEvent myFlag = new AutoResetEvent(false);
//Action<object> myAction = DoWork;
//var myBkTask = new Task(myAction, myFlag);
var myBkTask = new Task(delegate { DoWork(myFlag); });
myBkTask.Start();
LogMsg("Main thread worker waiting");
myFlag.WaitOne();
LogMsg("Main thread worker completed");
}
// Main
// Start up a background worker test instance
static void Main(string[] args)
{
var testWkr = new TasksTester();
testWkr.RunTest();
}
}
}
The output is-
19:05:47.041 ThreadId=1, Main thread worker waiting
19:05:47.060 ThreadId=3, Background worker starting
19:05:49.108 ThreadId=3, Background worker completed
19:05:49.108 ThreadId=1, Main thread worker completed