C#多线程的4中方式

Thread

cs 复制代码
class Program  
{  
    static void Main()  
    {  
        Thread thread = new Thread(new ThreadStart(DoWork));  
        thread.Start();  
        thread.Join(); // 等待线程完成  
  
        Console.WriteLine("主线程结束。");  
    }  
  
    static void DoWork()  
    {  
        Console.WriteLine("线程开始工作。");  
        Thread.Sleep(1000); // 模拟工作  
        Console.WriteLine("线程工作完成。");  
    }  
}

ThreadPool

cs 复制代码
class Program  
{  
    static void Main()  
    {  
        ThreadPool.QueueUserWorkItem(DoWork);  
        ThreadPool.QueueUserWorkItem(state => DoWorkWithState((string)state), "参数");  
  
        // 防止主线程提前结束  
        Thread.Sleep(2000);  
    }  
  
    static void DoWork(object state)  
    {  
        Console.WriteLine("ThreadPool 工作项开始工作。");  
        Thread.Sleep(1000); // 模拟工作  
        Console.WriteLine("ThreadPool 工作项完成。");  
    }  
  
    static void DoWorkWithState(string state)  
    {  
        Console.WriteLine($"ThreadPool 带参数的工作项开始工作,参数:{state}");  
        Thread.Sleep(1000); // 模拟工作  
        Console.WriteLine($"ThreadPool 带参数的工作项完成。");  
    }  
}

Task

cs 复制代码
class Program  
{  
    static async Task Main()  
    {  
        Task task = Task.Run(() => DoWork());  
        await task; // 等待任务完成  
  
        Console.WriteLine("主线程结束。");  
    }  
  
    static void DoWork()  
    {  
        Console.WriteLine("Task 开始工作。");  
        Task.Delay(1000).Wait(); // 模拟异步工作  
        Console.WriteLine("Task 工作完成。");  
    }  
}

async/await

cs 复制代码
class Program  
{  
    static async Task Main()  
    {  
        string url = "https://www.example.com";  
        string content = await FetchContentAsync(url);  
        Console.WriteLine(content);  
    }  
  
    static async Task<string> FetchContentAsync(string url)  
    {  
        using (HttpClient client = new HttpClient())  
        {  
            HttpResponseMessage response = await client.GetAsync(url);  
            response.EnsureSuccessStatusCode();  
            string responseBody = await response.Content.ReadAsStringAsync();  
            return responseBody;  
        }  
    }  
}
相关推荐
hummhumm17 分钟前
Oracle 第13章:事务处理
开发语言·数据库·后端·python·sql·oracle·database
@尘音20 分钟前
QT——记事本项目
开发语言·qt
童先生21 分钟前
python 用于请求chartGpt DEMO request请求方式
开发语言·python
qing_04060323 分钟前
C++——string的模拟实现(上)
开发语言·c++·string
魔道不误砍柴功24 分钟前
Java 中 String str = new String(“hello“); 里面创建了几个对象?
java·开发语言·string·new
长潇若雪1 小时前
指针进阶(四)(C 语言)
c语言·开发语言·经验分享·1024程序员节
梦想科研社2 小时前
【无人机设计与控制】红嘴蓝鹊优化器RBMO求解无人机路径规划MATLAB
开发语言·matlab·无人机
混迹网络的权某2 小时前
每天一道C语言精选编程题之求数字的每⼀位之和
c语言·开发语言·考研·算法·改行学it·1024程序员节
一只特立独行的猪6113 小时前
Java面试题——微服务篇
java·开发语言·微服务
喵手5 小时前
Java 与 Oracle 数据泵实操:数据导入导出的全方位指南
java·开发语言·oracle