目录
[1. 线程池(ThreadPool):](#1. 线程池(ThreadPool):)
[2. 任务并行库(TPL):](#2. 任务并行库(TPL):)
[3. 异步编程(Async/Await):](#3. 异步编程(Async/Await):)
[4. 取消任务(Cancellation):](#4. 取消任务(Cancellation):)
在C#中进行高级多线程编程涉及到更复杂的概念和技术,如线程池、任务并行库、异步编程等。下面是一些高级多线程编程的主题和示例:
1. 线程池(ThreadPool):
线程池是用于管理和重用线程的机制,可以减少线程创建和销毁的开销,提高性能。
cs
using System;
using System.Threading;
class Program
{
static void Main()
{
ThreadPool.QueueUserWorkItem(DoWork, "Hello from ThreadPool!");
}
static void DoWork(object data)
{
// 执行工作
string message = (string)data;
Console.WriteLine(message);
}
}
线程同步和互斥:
cs
using System;
using System.Threading;
class Program
{
static int counter = 0;
static object lockObject = new object();
static void Main()
{
Thread thread1 = new Thread(IncrementCounter);
Thread thread2 = new Thread(IncrementCounter);
thread1.Start();
thread2.Start();
thread1.Join();
thread2.Join();
Console.WriteLine("Final counter value: " + counter);
}
static void IncrementCounter()
{
for (int i = 0; i < 10000; i++)
{
lock (lockObject)
{
counter++;
}
}
}
}
2. 任务并行库(TPL):
任务并行库提供了更高级的并行编程模型,可以简化并发编程。
cs
using System;
using System.Threading.Tasks;
class Program
{
static void Main()
{
Task.Run(() => DoWork("Hello from Task!"));
}
static void DoWork(string message)
{
// 执行工作
Console.WriteLine(message);
}
}
3. 异步编程(Async/Await):
使用异步编程可以避免阻塞主线程,提高程序的响应性。
cs
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
await DoWorkAsync("Hello from Async!");
}
static async Task DoWorkAsync(string message)
{
// 模拟异步操作
await Task.Delay(1000);
Console.WriteLine(message);
}
}
4. 取消任务(Cancellation):
在异步操作中,需要考虑任务取消的情况,以避免资源浪费。
cs
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var cts = new CancellationTokenSource();
var token = cts.Token;
var task = Task.Run(() => DoWork(token));
// 模拟取消任务
cts.CancelAfter(500);
try
{
await task;
}
catch (OperationCanceledException)
{
Console.WriteLine("Task was canceled.");
}
}
static void DoWork(CancellationToken token)
{
while (!token.IsCancellationRequested)
{
// 执行工作
}
}
}
以上示例涵盖了一些C#中高级多线程编程的主题,包括线程池、任务并行库、异步编程和任务取消。这些技术可以帮助您更高效地处理并发编程任务,并提高程序的性能和响应性。