//Premium choice for .Net 4 and above public void MultipleThread_UseNewTask_Cancel() { var cts = new CancellationTokenSource(); var myData = new IntegratedParam { Id = 1, Name = "Tom", returnValue = "N/A" }; var task = new Task <string>(state => { var data = state as IntegratedParam; OutputWithTid("Output from Worker. Id:{0}, Name:{1}", data.Id, data.Name); Thread.Sleep(1000); var returnValue = "This is return value!"; cts.Token.ThrowIfCancellationRequested(); return(returnValue); }, myData, cts.Token); task.Start(); cts.Cancel(); try { OutputWithTid("Output from Main, Thread has been finished. ReturnValue: {0}", task.Result); } catch (AggregateException e) { e.Handle(ex => ex is OperationCanceledException); OutputWithTid("Task is cancled."); } }
//Premium choice for .Net 4 and above public void MultipleThread_UseNewTask() { var myData = new IntegratedParam { Id = 1, Name = "Tom", returnValue = "N/A" }; var task = new Task <string>(state => { var data = state as IntegratedParam; OutputWithTid("Output from Worker. Id:{0}, Name:{1}", data.Id, data.Name); Thread.Sleep(1000); var returnValue = "This is return value!"; return(returnValue); }, myData); task.Start(); OutputWithTid("Output from Main, Thread has been finished. ReturnValue: {0}", task.Result); }
public void MultipleThread_UseNewThreadWithParams() { var myData = new IntegratedParam { Id = 1, Name = "Tom", returnValue = "N/A" }; var thread = new Thread(state => { var data = state as IntegratedParam; OutputWithTid("Output from Worker. Id:{0}, Name:{1}", data.Id, data.Name); data.returnValue = "This is return value!"; Thread.Sleep(1000); }); thread.Start(myData); OutputWithTid("Output from Main, Thread may not finish. ReturnValue: {0}", myData.returnValue); thread.Join(); OutputWithTid("Output from Main. Thread has been finished. ReturnValue: {0}", myData.returnValue); }
public void MultipleThread_UseThreadPoolWithParam() { var workerDoneEvent = new ManualResetEvent(false); var myData = new IntegratedParam { Id = 1, Name = "Tom", returnValue = "N/A" }; bool result = ThreadPool.QueueUserWorkItem(state => { var data = state as IntegratedParam; OutputWithTid("Output from Worker. Id:{0}, Name:{1}", data.Id, data.Name); data.returnValue = "This is return value!"; Thread.Sleep(1000); workerDoneEvent.Set(); }, myData); OutputWithTid("Output from Main, Thread may not finish. ReturnValue: {0}", myData.returnValue); workerDoneEvent.WaitOne(); OutputWithTid("Output from Main. Thread has been finished. ReturnValue: {0}", myData.returnValue); }