using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace PLINQ_AsParallel
{
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static CancellationTokenSource tokenSource = new CancellationTokenSource();
static void Main(string[] args)
{
ThreadPool.SetMaxThreads(1000, 1000);
#region Where
//var personList = GetPersonList().AsParallel()
// .Where(x => x.Age > 30);
#endregion
#region ForAll
//GetPersonList().AsParallel().ForAll(person =>
//{
// ThreadPoolMessage(person);
//});
#endregion
#region withCancellation
Task.Factory.StartNew(Cancel);
try
{
GetPersonList().AsParallel().WithCancellation(tokenSource.Token)
.ForAll(person =>
{
ThreadPoolMessage(person);
});
}
catch(OperationCanceledException ex)
{
}
#endregion
Console.ReadKey();
}
static void Cancel()//在10~50毫秒内发出停止信号
{
Random random = new Random();
Thread.Sleep(random.Next(100, 500));
tokenSource.Cancel();
}
static void ThreadPoolMessage(Person person)
{
int a, b;
ThreadPool.GetAvailableThreads(out a, out b);
string message = string.Format("Person ID:{0} Name:{1} Age:{2}\n" +
" CurrentThreadId is {3}\n WorkerThreads is:{4}" +
" CompletionPortThreadId is:{5}\n",
person.ID, person.Name, person.Age,
Thread.CurrentThread.ManagedThreadId, a, b);
Console.WriteLine(message);
}
static IList<Person> GetPersonList()
{
var personList = new List<Person>();
var person1 = new Person();
person1.ID = 1;
person1.Name = "Leslie";
person1.Age = 30;
personList.Add(person1);
var person2 = new Person();
person2.ID = 2;
person2.Name = "Leslie";
person2.Age = 30;
personList.Add(person2);
var person3 = new Person();
person3.ID = 3;
person3.Name = "Leslie";
person3.Age = 30;
personList.Add(person3);
var person4 = new Person();
person4.ID = 4;
person4.Name = "Leslie";
person4.Age = 30;
personList.Add(person4);
return personList;
}
}
}
PLINQ
最新推荐文章于 2024-09-29 09:25:45 发布