美文网首页C#
C#多线程编程

C#多线程编程

作者: 金戈大王 | 来源:发表于2017-05-04 21:15 被阅读1603次

1、线程分为前台线程和后台线程,应用程序在所有前台线程结束后退出。

2、使用Thread创建前台线程:

Thread t1 = new Thread(Function1);
t1.Start();
private static void Function1()
 {
     Thread.Sleep(1000);//模拟耗时操作,睡眠1s
     Console.WriteLine("前台线程被调用!");
 }

3、使用Thread创建带参数的后台线程

Thread t2= new Thread(new ParameterizedThreadStart(Function2));
t2.IsBackground = true;//设置为后台线程
t2.Start("传参");
private static void Function2(object data)
 {
     Thread.Sleep(2000);//模拟耗时操作,睡眠2s
     Console.WriteLine("后台线程被调用!" + data);
 }

4、使用ThreadPool创建后台线程

Console.WriteLine("主线程开始!");
//创建要执行的任务
WaitCallback workItem = state => Console.WriteLine("当前线程Id为:" + Thread.CurrentThread.ManagedThreadId);
//重复调用10次
for (int i = 0; i < 10; i++)
{
    ThreadPool.QueueUserWorkItem(workItem);
}
Console.ReadLine();

5、并行For循环

ParallelLoopResult result = Parallel.For(0, 100, i => {
    Console.WriteLine("{0}, task: {1} , thread: {2}", i, Task.CurrentId, Thread.CurrentThread.ManagedThreadId);
});

6、启动Task

  • 方式一:
Task.Factory.StartNew(() => Console.WriteLine("Task running."));
  • 方式二:
Task.Run(() => Console.WriteLine("Task running."));
  • 接收返回值的Task
Console.WriteLine("主线程ID:" + Thread.CurrentThread.ManagedThreadId);
Task<string> task = Task.Run(() =>
{
    return Thread.CurrentThread.ManagedThreadId.ToString();
});
Console.WriteLine("创建Task对应的线程ID:" + task.Result);
Console.ReadLine();

7、async/await异步编程

static void Main(string[] args)
{
    //主线程调用AsyncCaller方法,被async标记的方法将会在合适的时候异步执行
    var task = AsyncCaller();
    //主线程调用task.Result等待异步执行结果
    Console.WriteLine(task.Result);       //3
    Console.ReadKey();
}
private static async Task<string> AsyncCaller()
{
    //await标记了一个等待点
    var str = await AsyncFunction();      //2
    return str;
}
private static Task<string> AsyncFunction()
{
    //下面就是将要被异步执行的任务,主线程到这里就会返回
    return Task.Run(() =>           //1
    {
        return "AsyncFunction()执行完毕";
    });
}

主线程执行到1处后,函数AsyncFunction返回,接着AsyncCaller直接从2处返回,并执行到3处等待。异步线程执行完毕后,返回到2处,继续向后执行,返回值传递给task.Result,异步线程结束。

参考资料

.Net异步编程知多少 圣杰

相关文章

  • 2017年度.C#学习规划.初步

    1.目标书籍:学习完这四本C#的书之后不再购买C#开发的相关书籍 《C#多线程编程实战》, 《C#并行编程高级教程...

  • C#多线程编程

    1、线程分为前台线程和后台线程,应用程序在所有前台线程结束后退出。 2、使用Thread创建前台线程: 3、使用T...

  • Step by step:一起来学C# (2)

    提纲: (1)C#的编程环境介绍 (2)C#的几个语言要素 (3)第一个C#的窗体程序 一、编程环境 C#的编程使...

  • C#多线程控制

    以下代码演示了主线程如何控制子线程的运行,希望对学习C#多线程编程的小伙伴有所帮助! 运行结果

  • 多线程编程

    多线程编程之Linux环境下的多线程(一)多线程编程之Linux环境下的多线程(二)多线程编程之Linux环境下的...

  • python多线程编程之异步委托

      多线程编程一向是难点,也容易出问题。之前c#中异步委托用的很爽,python中如何实现类似效果呢?   上面的...

  • Unity C#基础之 多线程的前世今生(下) 扩展篇

    在前面两篇Unity C#基础之 多线程的前世今生(上) 科普篇和Unity C#基础之 多线程的前世今生(中) ...

  • C#学习笔记

    C#中的线程(一)入门 C#中的线程(二) 线程同步基础 C#中的线程(三) 使用多线程 20190130补充: ...

  • C#并行和多线程编程

    —— 第一天 认识Parallel随着多核时代的到来,并行开发越来越展示出它的强大威力!使用并行程序,充分的利用系...

  • C#并行和多线程编程

    —— 第二天 并行集合和PLinq我们学习了Parallel的用法。并行编程,本质上是多线程的编程,那么当多个线程...

网友评论

    本文标题:C#多线程编程

    本文链接:https://www.haomeiwen.com/subject/cqxdtxtx.html