1.new Task().Start()
Task task = new Task(() =>
{
this.DoSomething("张三");
});
task.Start();
Task<int> task2 = new Task<int>(() =>
{
return DateTime.Now.Year;
});
task2.Start();
int result = task2.Result;
Debug.WriteLine($"result:{result}");
或
new Task(() =>
{
while (true) { NowTime = DateTime.Now.ToString(); }
}).Start ();
2.Task.Run()
Task.Run(() =>
{
this.DoSomething("张三");
});
Task<int> task2 = Task.Run<int>(() =>
{
return DateTime.Now.Year;
});
int result = task2.Result;
Debug.WriteLine($"result:{result}");
3.Task.Factory.StartNew()
TaskFactory factory = Task.Factory;
factory.StartNew(() =>
{
this.DoSomething("张三");
});
Task<int> task2 = factory.StartNew<int>(() =>
{
return DateTime.Now.Year;
});
int result = task2.Result;
Debug.WriteLine($"result:{result}");
或
Task.Factory.StartNew (() =>
{
while (true) { NowTime = DateTime.Now.ToString(); }
});
使用CancellationTokenSource结束一个线程:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Test1
{
internal class Program
{
static void Main(string[] args)
{
#if false
//CancellationTokenSource cts = new CancellationTokenSource();
CancellationTokenSource cts = new CancellationTokenSource(3*1000);
Task.Factory.StartNew(async() =>
{
while (!cts.IsCancellationRequested)
{
Console.WriteLine(DateTime.Now + "task2 running");
await Task.Delay(1000);
}
Console.WriteLine("task2 cancel");
}, cts.Token);
Console.WriteLine("main running");
Console.ReadLine();
Console.WriteLine("main over");
cts.Cancel();
Console.ReadLine();
#endif
CancellationTokenSource cts = new CancellationTokenSource(2*1000);
CancellationTokenSource cts2 = new CancellationTokenSource();
CancellationTokenSource ctsCombine = CancellationTokenSource.CreateLinkedTokenSource(cts.Token,cts2.Token);
Task.Factory.StartNew( () =>
{
while (!ctsCombine.IsCancellationRequested)
{
Console.WriteLine(DateTime.Now + "task1 running");
Task.Delay(1000);
}
Console.WriteLine("task1 over");
},cts.Token);
Task.Factory.StartNew(() =>
{
while (!ctsCombine.IsCancellationRequested)
{
Console.WriteLine(DateTime.Now + "task2 running");
Task.Delay(1000);
}
Console.WriteLine("task2 over");
},cts2.Token);
Console.WriteLine("main running");
Console.ReadLine();
Console.WriteLine("main over");
}
}
}