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 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\MultiThreadingStudy.Core\MultiThreadingStudy.Core.csproj" />
+  </ItemGroup>
+
+</Project>
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 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netstandard2.1</TargetFramework>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+</Project>
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<WeatherForecastController> _logger;
+
+        public WeatherForecastController(ILogger<WeatherForecastController> logger)
+        {
+            _logger = logger;
+        }
+
+        [HttpGet(Name = "GetWeatherForecast")]
+        public IEnumerable<WeatherForecast> 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 @@
+<Project Sdk="Microsoft.NET.Sdk.Web">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <Nullable>enable</Nullable>
+    <ImplicitUsings>enable</ImplicitUsings>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\MultiThreadingStudy.Core\MultiThreadingStudy.Core.csproj" />
+  </ItemGroup>
+
+</Project>
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
+    {
+        /// <summary>
+        ///  Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        ///  Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        ///  Required method for Designer support - do not modify
+        ///  the contents of this method with the code editor.
+        /// </summary>
+        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 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ 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 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>WinExe</OutputType>
+    <TargetFramework>net6.0-windows</TargetFramework>
+    <Nullable>enable</Nullable>
+    <UseWindowsForms>true</UseWindowsForms>
+    <ImplicitUsings>enable</ImplicitUsings>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\MultiThreadingStudy.Core\MultiThreadingStudy.Core.csproj" />
+  </ItemGroup>
+
+</Project>
\ 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
+    {
+        /// <summary>
+        ///  The main entry point for the application.
+        /// </summary>
+        [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 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+
+    <IsPackable>false</IsPackable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
+    <PackageReference Include="xunit" Version="2.4.1" />
+    <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+      <PrivateAssets>all</PrivateAssets>
+    </PackageReference>
+    <PackageReference Include="coverlet.collector" Version="3.1.2">
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+      <PrivateAssets>all</PrivateAssets>
+    </PackageReference>
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\MultiThreadingStudy.Core\MultiThreadingStudy.Core.csproj" />
+  </ItemGroup>
+
+</Project>
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