Namespace: System.Threading
Thread class have Properties like IsAlive, IsBackground, IsThreadPoolThread, ManagedThreadId,
Name, Priority,
and ThreadState.
Thread class have Methods like
Abort, Interrupt,
Join, and Start.
Static Properties Include Thread.CurrentContext, Thread.CurrentPrincipal,
Thread.CurrentThread.
Static Thread Methods include Thread.BeginCriticleRegion, Thread.EndCriticleRegion,
Thread.GetDomain, Thread.GetDomainID,
Thread.ResetAbort, Thread.Sleep,
Thread.SpinWait, Thread.VolatileRead,
and Thread.VolatileWrite
ThreadState enumerations are Aborted, AbortRequested,
Background, Running,
Stopped, StopRequested,
Suspended, SuspendedRequested,
Unstarted, and WaitSleepJoin.
Creating Thread:
ThreadStart
ts = new ThreadStart(mywork);
Thread t
= new Thread(ts);
t.Start();
Use Thread.Join to make all
thread complete their work before proceeding further.
ThreadPriority Enumeration is Highest, AboveNormal, Normal, BelowNormal,
and Lowest.
To pass data to you method use Parameterized Thread start.
ParameterizedThreadStart ts = new
ParameterizedThreadStart(mywork);
Thread t
= new Thread(ts);
t.Start(“Hello”);
{Thread}.Abort can kill a
thread at any time one may leave the data in inconsistent state. To handle this
create Critical Regions around the code block that can leave
data in inconsistent state.
Public static void mywork()
{
Thread.BeginCriticleRegion();
///Some
Work
Thread.EndCriticleRegion();
//Some
more work
}
Execution Context Flow:
Execution
context automatically flows to the newly created threads. Context contains
information about Security(IPrincipal), Localization(CultureInfo), Transaction
information (System.Transaction).
To stop this flow at the cost of the benefits provided by ContextInfo one can
call ExecutionContext.SuppressFlow.
AsyncFlowControl afc =
ExecutionContext.SuppressFlow();
ParameterizedThreadStart ts = new
ParameterizedThreadStart(mywork);
Thread t
= new Thread(ts);
t.Start(“Hello”);
ExecutionContext.RestoreFlow();
OR
flow.Undo()
ExecutionContext.Run can be used to run an arbitrary code
along with custom Context Information. Like:
ExecutionContext ctx =
ExecutionContext.Capture();
//return copy of the current context
ExecutionContext.Run(ctx, new
ContextCallback(mywork), null);
Comments