C#多线程整理
Thread
//直接运行
new Thread((s)=>Console.WriteLine(s)).Start("thread1")
Thread t = new Thread(delegate () { Console.WriteLine("fuck♂you2"); Thread.Sleep(1000); });
t.IsBackground = true; //程序推出后结束,默认false
t.Start(); //运行
t.Abort(); //停止
t.Join();//直到t执行完才进行主线程
int[] a = { 1, 3, 5, 2, 4, 6 }; //延时排序
for (int i = 0; i < a.Count(); i++)
{
new Thread(ss).Start(a[i]);
}
wh.Set();
static EventWaitHandle wh = new EventWaitHandle(false, EventResetMode.ManualReset);
private static void ss(object num)
{
int n = (int)num;
wh.WaitOne();
Thread.Sleep(n*100);
Console.Write(n.ToString() + ' ');
}
ThreadPool
for (int i = 0; i < 5; i++)
{
ThreadPool.QueueUserWorkItem(fun,"Hello from threadpool"+i.ToString());
}
private static void fun(object var)
{
string s = (string)var;
Console.WriteLine(var);
}
Task
Task<string> t1 = Task.Run(() => "task1");
t1.Wait();
Console.WriteLine(t1.Result + " form task");
Task<int> t3 = new Task<int>((x)=> { int num = (int)x; return num * 2; }, 1);
t3.Start();
Task<int> t4 = t3.ContinueWith<int>((x) => { int num = 2*x.Result; Console.WriteLine(num.ToString());return num; });//t3执行后执行
Task.Delay(TimeSpan.FromSeconds(2)).ContinueWith(dl => { Console.WriteLine("bye"); }); //延时后执行
async await
asfun();
private static async void asfun()
{
int res = await cal();
Console.WriteLine(res.ToString()+" async end");
}
private static async Task<int> cal()
{
int a=1;
for(int i=0;i<10;i++)
{
a *= 2;
}
return a;
}