예제 #1
0
        //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.");
            }
        }
예제 #2
0
        //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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
        }