C# 异步与线程

来源:互联网 发布:淘宝类目有哪些 编辑:程序博客网 时间:2024/05/22 06:56

1、Task

using System;using System.Linq;using System.Threading;using System.Threading.Tasks;using System.Web.Mvc;namespace Web.Controllers{    public class HomeController : Controller    {        #region Async Method        /// <summary>        ///         /// </summary>        /// <returns></returns>        public async Task<int> MethodAsync()        {            var today = await Task.FromResult<string>(DateTime.Now.DayOfWeek.ToString());            int leisureHours;            if (today.First() == 'S')                leisureHours = 16;            else                leisureHours = 5;            return leisureHours;        }        /// <summary>        /// 异步打印传入的字符串        /// </summary>        /// <param name="str"></param>        /// <returns></returns>        public async Task<string> AsyncPringString(string str)        {            return await Task.FromResult<string>("刘德华");        }        /// <summary>        ///         /// </summary>        /// <returns></returns>        public async Task<string> ss()        {            return await Task.Run(() => PrintString());        }        /// <summary>        /// 多线程执行后,执行另一个方法        /// </summary>        public void a()        {            var task1 = Task.Factory.StartNew(() => PrintString()).ContinueWith(                task => { Console.WriteLine(task.Result.ToString()); }).ContinueWith(                task => { Console.WriteLine("结束"); });        }        /// <summary>        /// 等待所有线程结束        /// </summary>        public void b()        {            var task1 = Task.Factory.StartNew(() => PrintString());            var task2 = Task.Factory.StartNew(() => PrintString());            var task3 = Task.Factory.StartNew(() => PrintString());            Task.WaitAll(task1, task2, task3);        }        /// <summary>        /// 等待其中一个线程结束        /// </summary>        public void c()        {            var task1 = Task.Factory.StartNew(() => PrintString());            var task2 = Task.Factory.StartNew(() => PrintString());            var task3 = Task.Factory.StartNew(() => PrintString());            Task.WaitAny(task1, task2, task3);        }        /// <summary>        /// 等待所有线程结束执行的方法        /// </summary>        public void d()        {            var task1 = Task.Factory.StartNew(() =>            {                Thread.Sleep(3000);                return "dummy value 1";            });            var task2 = Task.Factory.StartNew(() =>            {                Thread.Sleep(3000);                return "dummy value 2";            });            var task3 = Task.Factory.StartNew(() =>            {                Thread.Sleep(3000);                return "dummy value 3";            });            Task.Factory.ContinueWhenAll(new[] { task1, task2, task3 }, tasks =>            {                foreach (Task<string> task in tasks)                {                    Console.WriteLine(task.Result);                }            });        }        #endregion        #region Private Method        private string PrintString()        {            return "Hello World!";        }        #endregion    }}

2、Thread

无参数

public ActionResult FreeCallBack(){    try    {        Thread thread1 = new Thread(new ThreadStart(test));        thread1.IsBackground = true;        thread1.Start();    }    catch (Exception)    {    }    return View();}void test(){}

有参数

public ActionResult FreeCallBack(){    try    {        string conferenceid = "123456";        Thread thread = new Thread(new ParameterizedThreadStart(Monitor));        thread.IsBackground = true;        thread.Start(conferenceid);    }    catch (Exception)    {    }    return View();}void Monitor(object conferenceid){}

0 0