您的位置:首页 > 编程语言 > C#

5天玩转C#并行和多线程编程 —— 第三天 认识和使用Task

2017-08-09 13:56 579 查看
原文: 5天玩转C#并行和多线程编程 —— 第三天 认识和使用Task

有一点不太敢苟同:Task比线程池开销更小?

using System;
using System.Data.SqlClient;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
var task1 = new Task(() =>
{
Console.WriteLine("Hello,task");
});
task1.Start();

var task2 = Task.Factory.StartNew(() =>
{
Console.WriteLine("Hello,task started by task factory");
});

var task3 = new Task(() =>
{
Console.WriteLine("Begin");
System.Threading.Thread.Sleep(2000);
Console.WriteLine("Finish");
});
Console.WriteLine("Before start:" + task3.Status);
task3.Start();
Console.WriteLine("After start:" + task3.Status);
task3.Wait();
Console.WriteLine("After Finish:" + task3.Status);

var task5 = new Task(() =>
{
Console.WriteLine("Task 5 Begin");
System.Threading.Thread.Sleep(2000);
Console.WriteLine("Task 5 Finish");
});
var task6 = new Task(() =>
{
Console.WriteLine("Task 6 Begin");
System.Threading.Thread.Sleep(3000);
Console.WriteLine("Task 6 Finish");
});

task5.Start();
task6.Start();
Task.WaitAll(task5, task6);
Console.WriteLine("All task finished!");

var task7 = new Task(() => {
Console.WriteLine("Task7 begin");
Thread.Sleep(1000);
Console.WriteLine("Task7 end");
});
task7.Start();
var result = task7.ContinueWith<string>(_task7 =>
{
Console.WriteLine("task7 finished!");
return "This is task7 result!";
});
Console.WriteLine(result.Result.ToString());

var tokenSource = new CancellationTokenSource();
var token = tokenSource.Token;
var task = Task.Factory.StartNew(() =>
{
for (var i = 0; i < 1000; i++)
{
System.Threading.Thread.Sleep(1000);
if (token.IsCancellationRequested)
{
Console.WriteLine("Abort mission success!");
return;
}
}
}, token);
token.Register(() =>
{
Console.WriteLine("Canceled");
});
Console.WriteLine("Press enter to cancel task...");
Console.ReadKey();
tokenSource.Cancel();
Console.ReadKey();
Console.Read();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: