{ "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": [], "languageName": null, "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": [], "languageName": null, "name": "value" }, { "aliases": [ "js" ], "languageName": "JavaScript", "name": "javascript" }, { "aliases": [], "name": "webview" } ] } } }, "nbformat": 4, "nbformat_minor": 2 }