diff --git a/MultiThreadingStudy.ConsoleApp/MultiThreadingStudy.ConsoleApp.csproj b/MultiThreadingStudy.ConsoleApp/MultiThreadingStudy.ConsoleApp.csproj
new file mode 100644
index 0000000..e14711b
--- /dev/null
+++ b/MultiThreadingStudy.ConsoleApp/MultiThreadingStudy.ConsoleApp.csproj
@@ -0,0 +1,14 @@
+
+
+
+ Exe
+ net6.0
+ enable
+ enable
+
+
+
+
+
+
+
diff --git a/MultiThreadingStudy.ConsoleApp/Program.cs b/MultiThreadingStudy.ConsoleApp/Program.cs
new file mode 100644
index 0000000..eb459fd
--- /dev/null
+++ b/MultiThreadingStudy.ConsoleApp/Program.cs
@@ -0,0 +1,10 @@
+namespace MultiThreadingStudy.ConsoleApp
+{
+ internal class Program
+ {
+ static void Main(string[] args)
+ {
+ Console.WriteLine("Hello, World!");
+ }
+ }
+}
\ No newline at end of file
diff --git a/MultiThreadingStudy.Core/MultiThreadingStudy.Core.csproj b/MultiThreadingStudy.Core/MultiThreadingStudy.Core.csproj
new file mode 100644
index 0000000..8ef8970
--- /dev/null
+++ b/MultiThreadingStudy.Core/MultiThreadingStudy.Core.csproj
@@ -0,0 +1,8 @@
+
+
+
+ netstandard2.1
+ enable
+
+
+
diff --git a/MultiThreadingStudy.Core/Person.cs b/MultiThreadingStudy.Core/Person.cs
new file mode 100644
index 0000000..124accb
--- /dev/null
+++ b/MultiThreadingStudy.Core/Person.cs
@@ -0,0 +1,13 @@
+using System;
+
+namespace MultiThreadingStudy.Core
+{
+ public class Person
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public string Address { get; set; }
+ public int Age { get; set; }
+
+ }
+}
diff --git a/MultiThreadingStudy.WebApi/Controllers/WeatherForecastController.cs b/MultiThreadingStudy.WebApi/Controllers/WeatherForecastController.cs
new file mode 100644
index 0000000..e312a8e
--- /dev/null
+++ b/MultiThreadingStudy.WebApi/Controllers/WeatherForecastController.cs
@@ -0,0 +1,33 @@
+using Microsoft.AspNetCore.Mvc;
+
+namespace MultiThreadingStudy.WebApi.Controllers
+{
+ [ApiController]
+ [Route("[controller]")]
+ public class WeatherForecastController : ControllerBase
+ {
+ private static readonly string[] Summaries = new[]
+ {
+ "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
+ };
+
+ private readonly ILogger _logger;
+
+ public WeatherForecastController(ILogger logger)
+ {
+ _logger = logger;
+ }
+
+ [HttpGet(Name = "GetWeatherForecast")]
+ public IEnumerable Get()
+ {
+ return Enumerable.Range(1, 5).Select(index => new WeatherForecast
+ {
+ Date = DateTime.Now.AddDays(index),
+ TemperatureC = Random.Shared.Next(-20, 55),
+ Summary = Summaries[Random.Shared.Next(Summaries.Length)]
+ })
+ .ToArray();
+ }
+ }
+}
\ No newline at end of file
diff --git a/MultiThreadingStudy.WebApi/MultiThreadingStudy.WebApi.csproj b/MultiThreadingStudy.WebApi/MultiThreadingStudy.WebApi.csproj
new file mode 100644
index 0000000..4fd7cf7
--- /dev/null
+++ b/MultiThreadingStudy.WebApi/MultiThreadingStudy.WebApi.csproj
@@ -0,0 +1,17 @@
+
+
+
+ net6.0
+ enable
+ enable
+
+
+
+
+
+
+
+
+
+
+
diff --git a/MultiThreadingStudy.WebApi/Program.cs b/MultiThreadingStudy.WebApi/Program.cs
new file mode 100644
index 0000000..af6eae6
--- /dev/null
+++ b/MultiThreadingStudy.WebApi/Program.cs
@@ -0,0 +1,33 @@
+namespace MultiThreadingStudy.WebApi
+{
+ public class Program
+ {
+ public static void Main(string[] args)
+ {
+ var builder = WebApplication.CreateBuilder(args);
+
+ // Add services to the container.
+
+ builder.Services.AddControllers();
+ // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
+ builder.Services.AddEndpointsApiExplorer();
+ builder.Services.AddSwaggerGen();
+
+ var app = builder.Build();
+
+ // Configure the HTTP request pipeline.
+ if (app.Environment.IsDevelopment())
+ {
+ app.UseSwagger();
+ app.UseSwaggerUI();
+ }
+
+ app.UseAuthorization();
+
+
+ app.MapControllers();
+
+ app.Run();
+ }
+ }
+}
\ No newline at end of file
diff --git a/MultiThreadingStudy.WebApi/Properties/launchSettings.json b/MultiThreadingStudy.WebApi/Properties/launchSettings.json
new file mode 100644
index 0000000..a6c0f4e
--- /dev/null
+++ b/MultiThreadingStudy.WebApi/Properties/launchSettings.json
@@ -0,0 +1,31 @@
+{
+ "$schema": "https://json.schemastore.org/launchsettings.json",
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:11553",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "MultiThreadingStudy.WebApi": {
+ "commandName": "Project",
+ "dotnetRunMessages": true,
+ "launchBrowser": true,
+ "launchUrl": "swagger",
+ "applicationUrl": "http://localhost:5074",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "launchUrl": "swagger",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ }
+ }
+}
diff --git a/MultiThreadingStudy.WebApi/WeatherForecast.cs b/MultiThreadingStudy.WebApi/WeatherForecast.cs
new file mode 100644
index 0000000..479864c
--- /dev/null
+++ b/MultiThreadingStudy.WebApi/WeatherForecast.cs
@@ -0,0 +1,13 @@
+namespace MultiThreadingStudy.WebApi
+{
+ public class WeatherForecast
+ {
+ public DateTime Date { get; set; }
+
+ public int TemperatureC { get; set; }
+
+ public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
+
+ public string? Summary { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/MultiThreadingStudy.WebApi/appsettings.Development.json b/MultiThreadingStudy.WebApi/appsettings.Development.json
new file mode 100644
index 0000000..0c208ae
--- /dev/null
+++ b/MultiThreadingStudy.WebApi/appsettings.Development.json
@@ -0,0 +1,8 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ }
+}
diff --git a/MultiThreadingStudy.WebApi/appsettings.json b/MultiThreadingStudy.WebApi/appsettings.json
new file mode 100644
index 0000000..10f68b8
--- /dev/null
+++ b/MultiThreadingStudy.WebApi/appsettings.json
@@ -0,0 +1,9 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ },
+ "AllowedHosts": "*"
+}
diff --git a/MultiThreadingStudy.WinFormsApp/Form1.Designer.cs b/MultiThreadingStudy.WinFormsApp/Form1.Designer.cs
new file mode 100644
index 0000000..5aac8c8
--- /dev/null
+++ b/MultiThreadingStudy.WinFormsApp/Form1.Designer.cs
@@ -0,0 +1,39 @@
+namespace MultiThreadingStudy.WinFormsApp
+{
+ partial class Form1
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 450);
+ this.Text = "Form1";
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/MultiThreadingStudy.WinFormsApp/Form1.cs b/MultiThreadingStudy.WinFormsApp/Form1.cs
new file mode 100644
index 0000000..265274f
--- /dev/null
+++ b/MultiThreadingStudy.WinFormsApp/Form1.cs
@@ -0,0 +1,10 @@
+namespace MultiThreadingStudy.WinFormsApp
+{
+ public partial class Form1 : Form
+ {
+ public Form1()
+ {
+ InitializeComponent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/MultiThreadingStudy.WinFormsApp/Form1.resx b/MultiThreadingStudy.WinFormsApp/Form1.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/MultiThreadingStudy.WinFormsApp/Form1.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/MultiThreadingStudy.WinFormsApp/MultiThreadingStudy.WinFormsApp.csproj b/MultiThreadingStudy.WinFormsApp/MultiThreadingStudy.WinFormsApp.csproj
new file mode 100644
index 0000000..12c8b02
--- /dev/null
+++ b/MultiThreadingStudy.WinFormsApp/MultiThreadingStudy.WinFormsApp.csproj
@@ -0,0 +1,15 @@
+
+
+
+ WinExe
+ net6.0-windows
+ enable
+ true
+ enable
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/MultiThreadingStudy.WinFormsApp/Program.cs b/MultiThreadingStudy.WinFormsApp/Program.cs
new file mode 100644
index 0000000..1393994
--- /dev/null
+++ b/MultiThreadingStudy.WinFormsApp/Program.cs
@@ -0,0 +1,17 @@
+namespace MultiThreadingStudy.WinFormsApp
+{
+ internal static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ // To customize application configuration such as set high DPI settings or default font,
+ // see https://aka.ms/applicationconfiguration.
+ ApplicationConfiguration.Initialize();
+ Application.Run(new Form1());
+ }
+ }
+}
\ No newline at end of file
diff --git a/MultiThreadingStudy.sln b/MultiThreadingStudy.sln
new file mode 100644
index 0000000..6c68a2d
--- /dev/null
+++ b/MultiThreadingStudy.sln
@@ -0,0 +1,49 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.5.33424.131
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MultiThreadingStudy.ConsoleApp", "MultiThreadingStudy.ConsoleApp\MultiThreadingStudy.ConsoleApp.csproj", "{F7838094-BF1E-4CDF-A830-5D74EF794E7E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MultiThreadingStudy.Core", "MultiThreadingStudy.Core\MultiThreadingStudy.Core.csproj", "{C78EA88A-1005-4705-B97D-42C40E6C3F88}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MultiThreadingStudy.WebApi", "MultiThreadingStudy.WebApi\MultiThreadingStudy.WebApi.csproj", "{9E8F0AB7-8BB8-47AE-B232-1C1C8FCBA968}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MultiThreadingStudy.WinFormsApp", "MultiThreadingStudy.WinFormsApp\MultiThreadingStudy.WinFormsApp.csproj", "{A47D4D4A-6429-4380-B55F-0F441D3006A0}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MultiThreadingStudy.xUnitTest", "MultiThreadingStudy.xUnitTest\MultiThreadingStudy.xUnitTest.csproj", "{B50290FE-513E-4316-A965-E37AA9928FFE}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {F7838094-BF1E-4CDF-A830-5D74EF794E7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F7838094-BF1E-4CDF-A830-5D74EF794E7E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F7838094-BF1E-4CDF-A830-5D74EF794E7E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F7838094-BF1E-4CDF-A830-5D74EF794E7E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C78EA88A-1005-4705-B97D-42C40E6C3F88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C78EA88A-1005-4705-B97D-42C40E6C3F88}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C78EA88A-1005-4705-B97D-42C40E6C3F88}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C78EA88A-1005-4705-B97D-42C40E6C3F88}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9E8F0AB7-8BB8-47AE-B232-1C1C8FCBA968}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9E8F0AB7-8BB8-47AE-B232-1C1C8FCBA968}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9E8F0AB7-8BB8-47AE-B232-1C1C8FCBA968}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9E8F0AB7-8BB8-47AE-B232-1C1C8FCBA968}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A47D4D4A-6429-4380-B55F-0F441D3006A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A47D4D4A-6429-4380-B55F-0F441D3006A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A47D4D4A-6429-4380-B55F-0F441D3006A0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A47D4D4A-6429-4380-B55F-0F441D3006A0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B50290FE-513E-4316-A965-E37AA9928FFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B50290FE-513E-4316-A965-E37AA9928FFE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B50290FE-513E-4316-A965-E37AA9928FFE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B50290FE-513E-4316-A965-E37AA9928FFE}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {A1C4CDAA-C911-45EC-B2BB-FB638A0C99E4}
+ EndGlobalSection
+EndGlobal
diff --git a/MultiThreadingStudy.xUnitTest/MultiThreadingStudy.xUnitTest.csproj b/MultiThreadingStudy.xUnitTest/MultiThreadingStudy.xUnitTest.csproj
new file mode 100644
index 0000000..fe93d33
--- /dev/null
+++ b/MultiThreadingStudy.xUnitTest/MultiThreadingStudy.xUnitTest.csproj
@@ -0,0 +1,28 @@
+
+
+
+ net6.0
+ enable
+ enable
+
+ false
+
+
+
+
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+
+
+
+
+
+
diff --git a/MultiThreadingStudy.xUnitTest/UnitTest1.cs b/MultiThreadingStudy.xUnitTest/UnitTest1.cs
new file mode 100644
index 0000000..22d3b78
--- /dev/null
+++ b/MultiThreadingStudy.xUnitTest/UnitTest1.cs
@@ -0,0 +1,11 @@
+namespace MultiThreadingStudy.xUnitTest
+{
+ public class UnitTest1
+ {
+ [Fact]
+ public void Test1()
+ {
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/MultiThreadingStudy.xUnitTest/Usings.cs b/MultiThreadingStudy.xUnitTest/Usings.cs
new file mode 100644
index 0000000..8c927eb
--- /dev/null
+++ b/MultiThreadingStudy.xUnitTest/Usings.cs
@@ -0,0 +1 @@
+global using Xunit;
\ No newline at end of file