{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {
    "dotnet_interactive": {
     "language": "csharp"
    },
    "polyglot_notebook": {
     "kernelName": "csharp"
    }
   },
   "source": [
    "Thread 使用\n",
    "==============================\n",
    "学习 Thread,执行各种 Thread 操作。\n",
    "特别注意:NoteBook 本身的运行线程是后台线程,不会等待由其创建的线程执行结束。与控制台等应用有区别。 "
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {
    "dotnet_interactive": {
     "language": "csharp"
    },
    "polyglot_notebook": {
     "kernelName": "csharp"
    }
   },
   "source": [
    "> 全局设置,语言设置、Nuget包引用、空间引用等"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "dotnet_interactive": {
     "language": "csharp"
    },
    "polyglot_notebook": {
     "kernelName": "csharp"
    },
    "vscode": {
     "languageId": "polyglot-notebook"
    }
   },
   "outputs": [],
   "source": [
    "//全局设置\n",
    "#!csharp\n",
    "using System.Threading;\n",
    "using System.Threading.Channels;\n",
    "using System.Threading.Tasks;"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {
    "dotnet_interactive": {
     "language": "csharp"
    },
    "polyglot_notebook": {
     "kernelName": "csharp"
    }
   },
   "source": [
    "> 创建托管线程,注意:NoteBook 本身的运行线程是后台线程,不会等待由其创建的线程执行结束,这点与控制台等应用有区别。 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "dotnet_interactive": {
     "language": "csharp"
    },
    "polyglot_notebook": {
     "kernelName": "csharp"
    },
    "vscode": {
     "languageId": "polyglot-notebook"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "NoteBook线程,线程ID:6 \n",
      "NoteBook线程,线程名:.NET ThreadPool Worker \n",
      "NoteBook线程,线程池线程:是的 \n",
      "NoteBook线程,后台线:是的 \n"
     ]
    }
   ],
   "source": [
    "//显示 NoteBook 执行线程信息\n",
    "var desc = \"NoteBook线程,\";\n",
    "Console.WriteLine($\"{desc}线程ID:{Thread.CurrentThread.ManagedThreadId} \");\n",
    "Console.WriteLine($\"{desc}线程名:{Thread.CurrentThread.Name} \");\n",
    "Console.WriteLine($\"{desc}线程池线程:{(Thread.CurrentThread.IsThreadPoolThread ? \"是的\" : \"否\")} \");\n",
    "Console.WriteLine($\"{desc}后台线:{(Thread.CurrentThread.IsBackground ? \"是的\" : \"不是\")} \");"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "dotnet_interactive": {
     "language": "csharp"
    },
    "polyglot_notebook": {
     "kernelName": "csharp"
    },
    "vscode": {
     "languageId": "polyglot-notebook"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "线程:新线程,已经执行!\n",
      "线程:NoteBook线程,, 执行结束!\n"
     ]
    }
   ],
   "source": [
    "ThreadStart start = ()=>\n",
    "{\n",
    "    Console.WriteLine($\"线程:{Thread.CurrentThread.Name},已经执行!\");\n",
    "};\n",
    "\n",
    "var t = new Thread(start)\n",
    "{\n",
    "    Name=\"新线程\"\n",
    "};\n",
    "t.Start();\n",
    "//如果不join,新创建的线程,可能还没来得及执行,就随着Notebook线程的结束而结束了。\n",
    "t.Join();\n",
    "\n",
    "Console.WriteLine($\"线程:{desc}, 执行结束!\");\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": ".NET (C#)",
   "language": "C#",
   "name": ".net-csharp"
  },
  "polyglot_notebook": {
   "kernelInfo": {
    "defaultKernelName": "csharp",
    "items": [
     {
      "aliases": [
       "c#",
       "C#"
      ],
      "languageName": "C#",
      "name": "csharp"
     },
     {
      "aliases": [
       "frontend"
      ],
      "languageName": null,
      "name": "vscode"
     },
     {
      "aliases": [
       "powershell"
      ],
      "languageName": "PowerShell",
      "name": "pwsh"
     },
     {
      "aliases": [],
      "name": ".NET"
     },
     {
      "aliases": [
       "f#",
       "F#"
      ],
      "languageName": "F#",
      "name": "fsharp"
     },
     {
      "aliases": [],
      "languageName": "HTML",
      "name": "html"
     },
     {
      "aliases": [],
      "languageName": "KQL",
      "name": "kql"
     },
     {
      "aliases": [],
      "languageName": "Mermaid",
      "name": "mermaid"
     },
     {
      "aliases": [],
      "languageName": "SQL",
      "name": "sql"
     },
     {
      "aliases": [],
      "name": "value"
     },
     {
      "aliases": [
       "js"
      ],
      "languageName": "JavaScript",
      "name": "javascript"
     },
     {
      "aliases": [],
      "name": "webview"
     },
     {
      "aliases": [],
      "languageName": "T-SQL",
      "name": "sql-Demo"
     }
    ]
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}