際際滷

際際滷Share a Scribd company logo
System programing
Module 2 Thread
仂从
丕 从仂亢仆仂仄 仗仂亠 Windows 仄亳 仗仂舒从仂于亳亶
"仗仂从", 磻亳亶 仆从仂仆 于 磻仂 于亟仆仂 仂从亳 亟仍
仗仂亞舒仄亳.
仂从 - 亠 仍 于亳从仂仆舒仆仆 于亠亠亟亳仆 仗仂亠.
亠亳亶 仗仂从, 于仂亠仆亳亶 仂从仂 于仂亟 仗仂亠,
仆舒亰亳于舒 亞仍舒于仆 仗仂仂从仂仄.
丕 弍亟-磻亶 于亳从仂仆于舒仆亶 仗仂亞舒仄 .NET, 仂从舒 于仂亟
仗仂亰仆舒舒 亰舒 亟仂仗仂仄仂亞仂 仄亠仂亟 Main(). 亳
于亳从仍亳从 仂亞仂 仄亠仂亟 亞仂仍仂于仆亳亶 仗仂从 于仂ム
舒于仂仄舒亳仆仂.
Andrii Hladkyi
trilobt@gmail.com 2
仂从
 舒仄从舒 仗仍舒仂仄亳 .NET 仆亠 仆 仗礆仂亞仂
于亟仗仂于亟仆仂亠仆仆 "仂亟亳仆 亟仂 仂亟仆仂亞仂" 仄亢 亟仂仄亠仆舒仄亳
亟仂亟舒从于 (AppDomain)  仗仂仂从舒仄亳. 个舒从亳仆仂 仗亠于仆亳亶
亟仂仄亠仆 仗仂亞舒仄亳 仄仂亢亠 仄舒亳 从仍从舒 仗仂仂从于, 仂
于亳从仂仆ム 于 从仂亢亠仆 从仂仆从亠仆亳亶 仄仂仄亠仆 舒.
仍 仂亞仂, 从仂仆从亠仆亳亶 仗仂从 仆亠 仗亳于'磶舒仆亳亶 亟仂 仂亟仆仂亞仂
亟仂仄亠仆 亟仂亟舒从舒 仗仂磪仂仄 于仂亞仂 舒 亢亳. 仂仂从亳
仄仂亢 仗亠亠亳仆舒亳 亞舒仆亳 亟仂仄亠仆于 亟仂亟舒从于, 从仂仍亳 亠
于于舒亢舒亳仄 亰舒 亟仂仍仆亠 仗仍舒仆于舒仍仆亳从 仗仂仂从于
Windows  CLR-亠亠亟仂于亳亠 .NET.
Andrii Hladkyi
trilobt@gmail.com 3
仂从
亠亰于舒亢舒ム亳 仆舒 亠 仂 舒从亳于仆 仗仂仂从亳 仄仂亢
仗亠亠仄舒亳 仄亢 亞舒仆亳礆亳 亟仂仄亠仆于 亟仂亟舒从于, 从仂亢亠仆
仗仂从 于 弍亟-磻亳亶 从仂仆从亠仆亳亶 仄仂仄亠仆 舒 仄仂亢亠
于亳从仂仆于舒亳 仍从亳 于亠亠亟亳仆 仂亟仆仂亞仂 亟仂仄亠仆舒 亟仂亟舒从.
乂仂弍 仗仂亞舒仄仆仂 仂亳仄舒亳 亟仂仗 亟仂 亟仂仄亠仆 亟仂亟舒从舒, 于
磻仂仄 仂亰仄亠仆亳亶 仗仂仂仆亳亶 仗仂从, 于亳从仂亳于
舒亳仆亳亶 仄亠仂亟 Thread.GetDomain():
static void ExtractAppDomainHostingThread ()
{
// 亳仄舒亳 亟仂仄亠仆 仗仂亞舒仄亳, 仂 仂亰仄 仗仂仂仆亳亶 仗仂从.
AppDomain ad = Thread.GetDomain();
}
Andrii Hladkyi
trilobt@gmail.com 4
仂从
亟亳仆 亰 弍舒亞舒仂 弍仂仍ム亳 舒仗亠从于 仄仆仂亞仂仗仂仂仆仂亞仂
仗仂亞舒仄于舒仆仆 仗仂于'磶舒仆亳亶 亰 仂弍仄亠亢亠仆亳仄 从仂仆仂仍亠仄 仆舒亟
于亳从仂亳舒仆仆礆 仗仂仂从于 仂仗亠舒亶仆仂 亳亠仄仂 舒弍仂
CLR-亠亠亟仂于亳亠仄.
舒仗亳从仍舒亟, 仆舒仗亳舒于亳 弍仍仂从 从仂亟, 磻亳亶 于仂ム 仆仂于亳亶
仗仂从 于亳从仂仆舒仆仆, 仆亠 仄仂亢仆舒 亞舒舒仆于舒亳, 仂 亠亶 仗仂从
亰舒仗亳 仆亠亞舒亶仆仂. 舒仄 仂亞仂 舒从亳亶 从仂亟 仍亳亠
仗仂亳 仂仗亠舒亶仆 亳亠仄 亰舒仗亳亳 仗仂从, 磻 仍从亳
亠 弍亟亠 仄仂亢仍亳于仂 (亰舒亰于亳舒亶, 从仂仍亳 仗仍舒仆于舒仍仆亳从 仗仂仂从于
亟仂弍亠亠 亟仂 仆仂亞仂).
Andrii Hladkyi
trilobt@gmail.com 5
仂从
仍 仂亞仂, 于舒仂于ム亳, 仂 仗仂仂从亳 仄仂亢
仗亠亠仄舒亳 仄亢 亞舒仆亳礆亳 亟仂亟舒从于  从仂仆亠从于, 从仂仍亳
亠 仗仂弍仆仂 CLR, 于亳 仗仂于亳仆仆 磦仍亳, 磻 舒仗亠从亳
仗仂亞舒仄亳  亰仄仆ミ火夷出術 于 仗仂仂从舒 (仆舒仗亳从仍舒亟, 仗亟亟舒ム
弍舒亞舒仂仗仂仂从仂于仂亞仂 亟仂仗), 舒 磻 仂仗亠舒 - 舒仂仄舒仆亳仄亳
(亰仄仆ミ火夷出術 于 仗仂仂从舒 仂仗亠舒 仆亠弍亠亰仗亠仆 ).
亊从仂 于亳亟仆亳亶 仗仂从 亠 仆亠 仗仂于仆 亰舒于亠亳于 于仂
仂仗亠舒, 亟亞亳亶 于亟仆亳亶 仗仂从 仄仂亢亠 仗仂弍舒亳亳 仂弍'从 于
舒从仂于仂 亰仄仆亠仆仂仄 舒仆. 丕 亠亶 仄仂仄亠仆 亟亞亳亶 仗仂从,
仗仂 , 亳舒 从亳于仆 亟舒仆, 仂 弍亠亰仄仂于仆仂 仄仂亢亠
仗亳亰于亠亳 亟仂 亟亢亠 亟亳于仆亳 仗仂仄亳仍仂从, 亰仆舒亶亳  仆舒仍舒亞仂亟亳亳
磻 仆舒于 亠 于舒亢亠.
Andrii Hladkyi
trilobt@gmail.com 6
舒亞舒仂仗仂仂仆 亟仂亟舒从亳
丱仂舒 仗仍舒仂仄舒 .NET 仆亠 仄仂亢亠 仗仂于仆 仗亳仂于舒亳
从仍舒亟仆仂, 仗仂于'磶舒仆 亰 仗仂弍亟仂于仂 仆舒亟亶仆亳
弍舒亞舒仂仗仂仂仆亳 亟仂亟舒从于, 亠亶 仗仂亠 于亠 亢 亰仆舒仆仂
仗仂亠仆亳亶.
亳从仂亳仂于ム亳 亳仗亳, 于亳亰仆舒亠仆 于亠亠亟亳仆 仗仂仂
仄亠仆 System.Threading, 弍弍仍仂亠从 Task Parallel Library
(TPL) 于 .NET 4.0  于亳亠, 舒 舒从仂亢 从仍ム仂于 仍仂于舒 asinc 
await 仄仂于亳 C# 于 .NET 4.5, 仄仂亢仆舒 仗舒ミ火委亳 亰 弍亠亰仍
仗仂仂从于, 仗亳从仍舒亟舒ム亳 仄仆仄舒仍仆 亰亳仍仍.
Andrii Hladkyi
trilobt@gmail.com 7
namespase System.Threading
Andrii Hladkyi trilobt@gmail.com 8
丐亳仗 亳亰仆舒亠仆仆
Interlocked 丶亠亶 亳仗 仆舒亟舒 舒仂仄舒仆 仂仗亠舒 亟仍 亰仄仆仆亳, 仂亰亟仍亠仆亳 仄亢
亟亠从仍从仂仄舒 仗仂仂从舒仄亳
Monitor 丶亠亶 亳仗 亰舒弍亠亰仗亠 亳仆仂仆亰舒 仗仂仂从仂于亳 仂弍'从于,
于亳从仂亳仂于ム亳 弍仍仂从于舒仆仆  仂从于舒仆仆/亳亞仆舒仍亳. 仍ム仂于亠
仍仂于仂 lock 仄仂于亳 C # 亰舒仂仂于 "亰舒 仍舒仆从舒仄亳" 仂弍'从
Monitor
Mutex 丶亠亶 仗亳仄亳于 亳仆仂仆亰舒 仄仂亢亠 于亳从仂亳仂于于舒亳 亟仍
亳仆仂仆亰舒 仄亢 亞舒仆亳礆亳 亟仂仄亠仆于 亟仂亟舒从于
Parameterized
ThreadStart
丶亠亶 亟亠仍亠亞舒 亟仂亰于仂仍 仗仂仂从 于亳从仍亳从舒亳 仄亠仂亟亳, 磻
仗亳亶仄舒ム 亟仂于仍仆 从仍从 舒亞仄亠仆于
Semaphore 丶亠亶 亳仗 亟仂亰于仂仍 仂弍仄亠亢亳亳 从仍从 仗仂仂从于, 磻 仄仂亢
仄舒亳 亟仂仗 亟仂 亠 舒弍仂 亟仂 仗亠于仆仂亞仂 亳仗 亠于
仂亟仆仂舒仆仂
Thread 丶亠亶 亳仗 磦仍 仗仂从, 仂 于亳从仂仆 于 CLR-亠亠亟仂于亳.
亳从仂亳仂于ム亳 亠仂仗, 仄仂亢仆舒 仗仂仂亢亟舒亟仂仗仂仍仆亠仍仆亳亠
仗仂仂从亳 于 于亳亟仆仂仄 亟仂仄亠仆 亟仂亟舒从
ThreadPool 丶亠亶 亳仗 亟仂亰于仂仍 于亰舒仄仂亟亳 亰 仗亟亳仄于舒仆亳仄 CLR 仗仍仂仄
仗仂仂从于 于亠亠亟亳仆 亰舒亟舒仆仂亞仂 仗仂亠
namespase System.Threading
Andrii Hladkyi
trilobt@gmail.com 9
丐亳仗 亳亰仆舒亠仆仆
ThreadPriority 丶亠 仗亠亠舒于舒仆仆 仗亠亟舒于仍 于亠仆 仗仂亳亠 仗仂仂从
(Highest, Normal  .亟.)
ThreadStart 丶亠亶 亟亠仍亠亞舒 亟仂亰于仂仍 于从舒亰舒亳 仄亠仂亟 亟仍 于亳从仍亳从 于 亰舒亟舒仆仂仄
仗仂仂. 舒 于亟仄仆 仂亟亠仍亠亞舒舒 ParametrizedThreadStart, 仍仂于
仄亠仂亟亳 ThreadStart 亰舒于亢亟亳 仗仂于亳仆仆 仄舒亳 仂亟亳仆  仂亶 亢亠
仗仂仂亳仗
ThreadState 丶亠 仗亠亠舒于舒仆仆 亰舒亟舒 亟仂仗亳仄 舒仆 仗仂仂从 (Running,
Aborted  .亟.)
Timer 丶亠亶 亳仗 仆舒亟舒 仄亠舒仆亰仄 于亳从仂仆舒仆仆 仄亠仂亟 亠亠亰 亰舒亰仆舒亠仆
仆亠于舒仍亳 舒
TimerCallback 丶亠亶 亳仗 亟亠仍亠亞舒舒 于亳从仂亳仂于 于 仗仂亟仆舒仆仆 亰 亳仗舒仄亳
Timer
弌舒亳仆 仍亠仆亳 从仍舒 Thread
Andrii Hladkyi
trilobt@gmail.com 10
丐亳仗 亳亰仆舒亠仆仆
CurrentContext 丶 于仍舒亳于, 仗亳亰仆舒亠仆舒 仍从亳 亟仍 亳舒仆仆, 仗仂于亠舒
从仂仆亠从, 于 磻仂仄 于 亟舒仆亳亶 仄仂仄亠仆 于亳从仂仆 仗仂从
CurrentThread 丶亠 于仍舒亳于, 仗亳亰仆舒亠仆舒 仍从亳 亟仍 亳舒仆仆, 仗仂于亠舒
仗仂亳仍舒仆仆 仆舒 仗仂仂仆亳亶 于亳从仂仆于舒仆亳亶 仗仂从
GetDomain()
GetDomainID()
丶亠亶 仄亠仂亟 仗仂于亠舒 仗仂亳仍舒仆仆 仆舒 仗仂仂仆亳亶 亟仂仄亠仆 亟仂亟舒从舒
舒弍仂 亟亠仆亳从舒仂 亟仂仄亠仆, 于 磻仂仄 于亳从仂仆 仗仂仂仆亳亶
仗仂从
Sleep() 丶亠亶 仄亠仂亟 仗亳亰仗亳仆 仗仂仂仆亳亶 仗仂从 仆舒 亰舒亰仆舒亠仆亳亶 舒
丼仍亠仆亳 于仆 亠从亰亠仄仗仍舒 从仍舒 Thread
Andrii Hladkyi
trilobt@gmail.com 11
丐亳仗 亳亰仆舒亠仆仆
IsAlive 仂于亠舒 弍仍亳于从亠 亰仆舒亠仆仆, 磻亠 于从舒亰 仆舒 亠, 亳
亰舒仗亠仆亳亶 仗仂从 ( 仗仂从亳 亠 仆亠 仗亠亠于舒仆亳亶  仆亠 从舒仂于舒仆亳亶)
IsBackground 亳仄 舒弍仂 于舒仆仂于仍ム 亰仆舒亠仆仆, 磻亠 于从舒亰, 亳  亟舒仆亳亶
仗仂从 仂仆仂于亳仄
Name 仂亰于仂仍 于舒仆仂于亳亳 亟亢仆 亠从仂于亠 仄' 仗仂仂从
Priority 亳仄 舒弍仂 于舒仆仂于仍ム 仗仂亳亠 仗仂仂从, 磻亳亶 仄仂亢亠
仗亳亶仄舒亳 亰仆舒亠仆仆 亰 仗亠亠舒于舒仆仆 ThreadPriority
ThreadState 亳仄 舒仆 亟舒仆仂亞仂 仗仂仂从, 磻亠 仄仂亢亠 仗亳亶仄舒亳 亰仆舒亠仆仆 亰
仗亠亠舒于舒仆仆 ThreadState
丼仍亠仆亳 于仆 亠从亰亠仄仗仍舒 从仍舒 Thread
Andrii Hladkyi
trilobt@gmail.com 12
丐亳仗 亳亰仆舒亠仆仆
Abort() 从舒亰 CLR-亠亠亟仂于亳 仆舒 仆亠仂弍亟仆 仗亳仗亳仆亠仆仆
仗仂仂从, 磻 仍从亳 亠 弍亟亠 仄仂亢仍亳于仂
Interrupt() 亠亠亳于舒 (仗亳亰仗亳仆) 仗仂仂仆亳亶 仗仂从 仆舒 于亟仗仂于亟仆亳亶
仗亠仂亟 仂从于舒仆仆
Join() 仍仂从 于亳从仍亳从舒ム亳亶 仗仂从 亟仂 亳 仗, 仗仂从亳 于从舒亰舒仆亳亶 仗仂从
(仂亶, 仆舒 磻仂仄 于亳从仍亳从舒仆亳亶 仄亠仂亟 Join ()) 仆亠 亰舒于亠亳
Resume() 亟仆仂于仍ム 舒仆亠 仗亳亰仗亳仆亠仆亳亶 仗仂从
Start() 从舒亰 CLR-亠亠亟仂于亳 仆舒 仆亠仂弍亟仆 亰舒仗从 仗仂仂从, 磻
仍从亳 亠 弍亟亠 仄仂亢仍亳于仂
Suspend() 亳亰仗亳仆 仗仂从. 亊从仂 仗仂从 于亢亠 仗亳仗亳仆亠仆亳亶, 于亳从仍亳从
Suspend () 仆亠 亟舒 仆磻仂亞仂 亠亠从
Andrii Hladkyi
trilobt@gmail.com 13
亠仄仂仆舒
仆亠 于仂亠仆仆 于仂亳仆仆亳 仗仂仂从于
仂从亳 亟仍 仆仂亞仂 于仂亠仆仆 仗仂仂从:
1. 弌于仂 仄亠仂亟, 磻亳亶 弍亟亠 仍亢亳亳 仂从仂 于仂亟 亟仍 仆仂于仂亞仂
仗仂仂从.
2. 弌于仂 仆仂于亳亶 亠从亰亠仄仗仍 亟亠仍亠亞舒舒 ParametrizedThreadStart (舒弍仂
ThreadStart), 仗亠亠亟舒于亳 从仂仆从仂 舒亟亠 仄亠仂亟, 磻亳亶 弍于
于亳亰仆舒亠仆亳亶 仆舒 从仂 1.
3. 弌于仂 仂弍'从 Thread, 仗亠亠亟舒于亳 从仂仆从仂 磻 舒亞仄亠仆
亟亠仍亠亞舒 ParametrizedThreadStart/ThreadStart.
4. 舒仆仂于 仗仂舒从仂于 舒舒从亠亳亳从亳 仗仂仂从 (仄', 仗仂亳亠 
.亟.).
5. 亳从仍亳亠 仄亠仂亟 Thread.Start(). 丶亠 仗亳亰于亠亟亠 亟仂 亰舒仗从 CLR-
亠亠亟仂于亳亠仄 仗仂仂从 亟仍 仄亠仂亟, 仆舒 磻亳亶 仗仂亳仍舒 亟亠仍亠亞舒,
于仂亠仆亳亶 仆舒 从仂 2, 仗亳 仗亠亶 亢亠 仄仂亢仍亳于仂.
Andrii Hladkyi trilobt@gmail.com 14
亳仆仂仆仆亳亶 于亳从仍亳从 仄亠仂亟于
Andrii Hladkyi trilobt@gmail.com 15
仂仍 亟亠仍亠亞舒于 .NET
亠仍亠亞舒 .NET - 亠 仗仂  弍亠亰仗亠仆亳亶 仂亟仂 亳仗于, 仂弍'从仆仂-
仂仆仂于舒仆亳亶 仗仂从舒亢亳从 仆舒 仆从.
 亳仗 亟亠仍亠亞舒舒, .NET 从仂仄仗仍仂 C# 仗仂弍亟 亰舒仗亠舒舒仆亳亶 从仍舒,
仆舒仍亟于舒仆仂亞仂 于亟 System.MulticastDelegate.
丶 弍舒亰仂于 从仍舒亳 仆舒亟舒ム 从仂亢仆仂仄 亟亠仍亠亞舒 仄仂亢仍亳于 仗亟亳仄于舒亳
仗亳仂从 舒亟亠于 仄亠仂亟于, 磻 仄仂亢 弍亳 于亳从仍亳从舒仆 于 弍仍 仗亰仆亶
舒.
public sealed class BinaryOperation : System.MulticastDelegate
{
public BinaryOperation(object target, uint functionAddress);
public int Invoke(int x, int ) ;
public IAsyncResult BeginInvoke(intx, int y, AsyncCallback cb,
object state);
public int EndInvoke(IAsyncResult result);
}
Andrii Hladkyi
trilobt@gmail.com 16
亳仆仂仆仆舒 仗亳仂亟舒 亟亠仍亠亞舒于
仂仍亳 从仂仄仗仍仂 C# 仂弍仂弍仍 从仍ム仂于亠 仍仂于仂 delegate,
于仆 亟亳仆舒仄仆仂 亞亠仆亠 从仍舒, 磻亳亶 于亳亰仆舒舒 亟于舒 仄亠仂亟亳 亰
仄亠仆舒仄亳 BeginInvoke()  EndInvoke().
public sealed class BinaryOperation : System.MulticastDelegate
{
// 亳从仂亳仂于 亟仍 舒亳仆仂仆仆仂亞仂 于亳从仍亳从 仄亠仂亟
public IAsyncResult BeginInvoke(int x, int , AsyncCallback cb,
object state);
// 亳从仂亳仂于 亟仍 仂亳仄舒仆仆 亰仆舒亠仆仆, 仂 仗仂于亠舒
// 于亳从仍亳从舒仆亳仄 仄亠仂亟仂仄.
public int EndInvoke(IAsyncResult result);
}
Andrii Hladkyi
trilobt@gmail.com 17
仆亠亠亶 IAsyncResult
亠仂亟 BeginInvoke() 亰舒于亢亟亳 仗仂于亠舒 仂弍'从, 磻亳亶 亠舒仍亰
仆亠亠亶 IAsyncResult, 于 仂亶 舒 磻 EndInvoke() 于亳仄舒亞舒
亟亳仆亳亶 仗舒舒仄亠 仄仆仂亞仂 亰 IAsyncResult 亳仗.
弌仄仆亳亶 亰 IAsyncResult 仂弍'从, 仂 仗仂于亠舒 亰
BeginInvoke() - 亠 于 仂仆仂于仆仂仄 亰于'磶ム亳亶 仄亠舒仆亰仄, 磻亳亶
亟仂亰于仂仍 于亳从仍亳从舒ム仂仄 仗仂仂从 仂亳仄舒亳 亠亰仍舒 于亳从仍亳从
舒亳仆仂仆仆仂亞仂 仄亠仂亟 亠亠亰 EndInvoke() 于 弍仍 仗亰仆亶 舒.
public interface IAsyncResult
{
object AsyncState { get; }
WaitHandle AsyncWaitHandle { get; }
bool CompletedSynchronously { get; }
bool IsCompleted { get; }
}
亠仂亟, 磻亳亶 仗仂于亠舒 void, 仄仂亢仆舒 仗仂仂 于亳从仍亳从舒亳 舒亳仆仂仆仆仂  亰舒弍亳.
Andrii Hladkyi
trilobt@gmail.com 18
弌亳仆仂仆亰舒 于亳从仍亳从舒ム仂亞仂 仗仂仂从
乂仂弍 亟仂亰于仂仍亳亳 于亳从仍亳从舒ム仂仄 仗仂仂从 亰'仂于于舒亳, 亳
亰舒于亠亳于 于仂 仂弍仂 舒亳仆仂仆仆仂 于亳从仍亳从舒仆亳亶 仄亠仂亟,
于 仆亠亠亶 IAsyncResult 仗亠亠亟弍舒亠仆仂 于仍舒亳于
IsCompleted.   亟仂仗仂仄仂亞仂 于亳从仍亳从舒ム亳亶 仗仂从 仄仂亢亠
于亳亰仆舒舒亳, 亳 亟亶仆仂 舒亳仆仂仆仆亳亶 于亳从仍亳从 弍于
亰舒于亠亠仆亳亶, 仗亠 仆亢 亰于亠舒亳 亟仂 EndInvoke().
亊从仂 仄亠仂亟 亠 仆亠 亰舒于亠亳于, 于仍舒亳于
IsCompleted 仗仂于亠舒 false,
Andrii Hladkyi
trilobt@gmail.com 19
仂仍 亟亠仍亠亞舒舒 AsyncCallback
舒仄 仂仗亳于舒仆仆 亟亠仍亠亞舒舒 亰 仄亠仂 于亳亰仆舒亠仆仆, 亳
亰舒于亠亳于 舒亳仆仂仆仆仂 于亳从仍亳从舒仆亳亶 仄亠仂亟, 弍仍仂 弍
弍仍 亠亠从亳于仆仂 亰仄亳亳 于仂亳仆仆亳亶 仗仂从
仆仂仄于舒亳 于亳从仍亳从舒ム亳亶 仗仂从 仗仂 亰舒于亠亠仆仆
于亳从仂仆舒仆仆 亰舒于亟舒仆仆.
乂仂弍 于从仍ム亳亳 舒从 仗仂于亠亟仆从, 亰仆舒亟仂弍亳 仗亠亠亟舒亳
仄亠仂亟 BeginInvoke() 亠从亰亠仄仗仍 亟亠仍亠亞舒舒
System.AsyncCallback.
仂仍亳 仗亠亠亟舒 仂弍'亠从 AsyncCallback, 亟亠仍亠亞舒 弍亟亠
舒于仂仄舒亳仆仂 于亳从仍亳从舒亳 于从舒亰舒仆亳亶 仄亠仂亟 仗仂 亰舒于亠亠仆仆
舒亳仆仂仆仆仂亞仂 于亳从仍亳从.
亠仂亟 亰于仂仂仆仂亞仂 于亳从仍亳从 弍亟亠 于亳从仍亳从舒仆亳亶  于仂亳仆仆仂仄 仗仂仂, 舒 仆亠 于
仗亠于亳仆仆仂仄.
Andrii Hladkyi
trilobt@gmail.com 20
亠亠亟舒舒  仂亳仄舒仆仆 仗亠舒仍仆亳 亟舒仆亳 舒仆
个仆舒仍仆亳仄 舒仗亠从仂仄 舒亳仆仂仆仆亳 亟亠仍亠亞舒于, 磻亳亶
仗仂于亳仆亠仆 弍亳 于舒仂于舒仆亳亶,  仂舒仆仆亶 舒亞仄亠仆 仄亠仂亟
BeginInvoke(). 丶亠亶 仗舒舒仄亠 亟仂亰于仂仍 仗亠亠亟舒于舒亳
亟仂亟舒从仂于 仆仂仄舒 仗仂 舒仆 仄亠仂亟 亰于仂仂仆仂亞仂
于亳从仍亳从 亰 仗亠于亳仆仆仂亞仂 仗仂仂从.
仍 仂亳仄舒仆仆 亳 亟舒仆亳 于 从仂仆亠从 仄亠仂亟
亰于仂仂仆仂亞仂 于亳从仍亳从 于亳从仂亳仂于 于仍舒亳于
AsyncState 于亟仆仂亞仂 仗舒舒仄亠舒 IAsyncResult.
Andrii Hladkyi
trilobt@gmail.com 21
Andrii Hladkyi
trilobt@gmail.com 22
亠仄仂仆舒
仍 仗仂仂从于 CLR
亳 舒亳仆仂仆仆仂仄 于亳从仍亳从 仄亠仂亟 亰 于亳从仂亳舒仆仆礆
亳仗于 亟亠仍亠亞舒于 (亠亠亰 仄亠仂亟 BeginInvoke())
亠亠亟仂于亳亠 CLR 仆舒仗舒于亟 仆亠 于仂ム 仆仂于亳亶 仗仂从. 
仄亠仂 亠亠从亳于仆仂 仄亠仂亟 BeginInvoke() 亟亠仍亠亞舒舒
亰舒亟 仗仍 仂弍仂亳 仗仂仂从于, 磻亳亶 仗亟亳仄
于亳从仂仆ム亳仄 亠亠亟仂于亳亠仄. 仍 于亰舒仄仂亟 亰 亳仄 仗仍仂仄
于 仗仂仂 仄亠仆 System.Threading 仗亠亠亟弍舒亠仆亳亶 从仍舒
ThreadPool. 乂仂弍 亰舒仗仂亳亳 仗仂从 亰 仗仍 亟仍 仂弍仂弍从亳
于亳从仍亳从 仄亠仂亟, 仄仂亢仆舒 从仂亳舒亳 仄亠仂亟仂仄
ThreadPool.QueueUserWorkItem(WaitCallback callBack);
ThreadPool.QueueUserWorkItem(WaitCallback callBack,
object state);
Andrii Hladkyi
trilobt@gmail.com 23
仍 仗仂仂从于 CLR
亠亠于舒亞亳 于亰舒仄仂亟 亰 仗亟亳仄于舒仆亳仄 亠亠亟仂于亳亠仄
CLR 仗仍仂仄 仗仂仂从于 于 仗仂于仆礌仆 亰 磦仆亳仄 于仂亠仆仆礆
仂弍'从于 Thread?
1. 仍 仗仂仂从于 仗舒于仍 仗仂仂从舒仄亳 亠亠从亳于仆亳仄 亳仆仂仄, 亰于仂亟亳 亟仂
仄仆仄仄 从仍从 于仂ミ火夷出狐, 亰舒仗从舒ム亳  亰仗亳仆ム亳
仗仂仂从于.
2. 舒 舒仆仂从 于亳从仂亳舒仆仆 仗仍 仗仂仂从于 仄仂亢仆舒 亰仂亠亠亟亳亳 仆舒
于亳亠仆仆 亰舒于亟舒仆仆, 舒 仆亠 仆舒 仗仂仂从仂于亶 仆舒从 亟仂亟舒从舒.
仂亠, 于 亟亠磻亳 于亳仗舒亟从舒 仆亠 仗舒于仍仆仆 仗仂仂从舒仄亳
于亳磦仍 从舒亳仄.
 仂仍亳 仗仂弍仆 仗仂仂从亳 仗亠亠亟仆仂亞仂 仗仍舒仆 舒弍仂 仗仂于亳仆亠仆 弍亳
于舒仆仂于仍亠仆亳亶 仗仂亳亠 仗仂仂从. 仂仂从亳 亰 仗仍 亰舒于亢亟亳 
仂仆仂于亳仄亳  仄舒ム 舒仆亟舒仆亳亶 仗仂亳亠 (ThreadPriority.
Normal).
 仂仍亳 仗仂弍仆仂 仗仂从 亰 从仂于舒仆仂 亟亠仆亳仆, 仂弍 亶仂亞仂
仄仂亢仆舒 弍仍仂 仗亠仗亠亳于舒亳, 仗亳亰仗亳仆亳 舒弍仂 亰仆舒仂亟亳亳 仗仂 仄亠仆.
Andrii Hladkyi
trilobt@gmail.com 24
Andrii Hladkyi
trilobt@gmail.com 25
亠仄仂仆舒

More Related Content

System programing module 2. Threads

  • 2. 仂从 丕 从仂亢仆仂仄 仗仂亠 Windows 仄亳 仗仂舒从仂于亳亶 "仗仂从", 磻亳亶 仆从仂仆 于 磻仂 于亟仆仂 仂从亳 亟仍 仗仂亞舒仄亳. 仂从 - 亠 仍 于亳从仂仆舒仆仆 于亠亠亟亳仆 仗仂亠. 亠亳亶 仗仂从, 于仂亠仆亳亶 仂从仂 于仂亟 仗仂亠, 仆舒亰亳于舒 亞仍舒于仆 仗仂仂从仂仄. 丕 弍亟-磻亶 于亳从仂仆于舒仆亶 仗仂亞舒仄 .NET, 仂从舒 于仂亟 仗仂亰仆舒舒 亰舒 亟仂仗仂仄仂亞仂 仄亠仂亟 Main(). 亳 于亳从仍亳从 仂亞仂 仄亠仂亟 亞仂仍仂于仆亳亶 仗仂从 于仂ム 舒于仂仄舒亳仆仂. Andrii Hladkyi trilobt@gmail.com 2
  • 3. 仂从 舒仄从舒 仗仍舒仂仄亳 .NET 仆亠 仆 仗礆仂亞仂 于亟仗仂于亟仆仂亠仆仆 "仂亟亳仆 亟仂 仂亟仆仂亞仂" 仄亢 亟仂仄亠仆舒仄亳 亟仂亟舒从于 (AppDomain) 仗仂仂从舒仄亳. 个舒从亳仆仂 仗亠于仆亳亶 亟仂仄亠仆 仗仂亞舒仄亳 仄仂亢亠 仄舒亳 从仍从舒 仗仂仂从于, 仂 于亳从仂仆ム 于 从仂亢亠仆 从仂仆从亠仆亳亶 仄仂仄亠仆 舒. 仍 仂亞仂, 从仂仆从亠仆亳亶 仗仂从 仆亠 仗亳于'磶舒仆亳亶 亟仂 仂亟仆仂亞仂 亟仂仄亠仆 亟仂亟舒从舒 仗仂磪仂仄 于仂亞仂 舒 亢亳. 仂仂从亳 仄仂亢 仗亠亠亳仆舒亳 亞舒仆亳 亟仂仄亠仆于 亟仂亟舒从于, 从仂仍亳 亠 于于舒亢舒亳仄 亰舒 亟仂仍仆亠 仗仍舒仆于舒仍仆亳从 仗仂仂从于 Windows CLR-亠亠亟仂于亳亠 .NET. Andrii Hladkyi trilobt@gmail.com 3
  • 4. 仂从 亠亰于舒亢舒ム亳 仆舒 亠 仂 舒从亳于仆 仗仂仂从亳 仄仂亢 仗亠亠仄舒亳 仄亢 亞舒仆亳礆亳 亟仂仄亠仆于 亟仂亟舒从于, 从仂亢亠仆 仗仂从 于 弍亟-磻亳亶 从仂仆从亠仆亳亶 仄仂仄亠仆 舒 仄仂亢亠 于亳从仂仆于舒亳 仍从亳 于亠亠亟亳仆 仂亟仆仂亞仂 亟仂仄亠仆舒 亟仂亟舒从. 乂仂弍 仗仂亞舒仄仆仂 仂亳仄舒亳 亟仂仗 亟仂 亟仂仄亠仆 亟仂亟舒从舒, 于 磻仂仄 仂亰仄亠仆亳亶 仗仂仂仆亳亶 仗仂从, 于亳从仂亳于 舒亳仆亳亶 仄亠仂亟 Thread.GetDomain(): static void ExtractAppDomainHostingThread () { // 亳仄舒亳 亟仂仄亠仆 仗仂亞舒仄亳, 仂 仂亰仄 仗仂仂仆亳亶 仗仂从. AppDomain ad = Thread.GetDomain(); } Andrii Hladkyi trilobt@gmail.com 4
  • 5. 仂从 亟亳仆 亰 弍舒亞舒仂 弍仂仍ム亳 舒仗亠从于 仄仆仂亞仂仗仂仂仆仂亞仂 仗仂亞舒仄于舒仆仆 仗仂于'磶舒仆亳亶 亰 仂弍仄亠亢亠仆亳仄 从仂仆仂仍亠仄 仆舒亟 于亳从仂亳舒仆仆礆 仗仂仂从于 仂仗亠舒亶仆仂 亳亠仄仂 舒弍仂 CLR-亠亠亟仂于亳亠仄. 舒仗亳从仍舒亟, 仆舒仗亳舒于亳 弍仍仂从 从仂亟, 磻亳亶 于仂ム 仆仂于亳亶 仗仂从 于亳从仂仆舒仆仆, 仆亠 仄仂亢仆舒 亞舒舒仆于舒亳, 仂 亠亶 仗仂从 亰舒仗亳 仆亠亞舒亶仆仂. 舒仄 仂亞仂 舒从亳亶 从仂亟 仍亳亠 仗仂亳 仂仗亠舒亶仆 亳亠仄 亰舒仗亳亳 仗仂从, 磻 仍从亳 亠 弍亟亠 仄仂亢仍亳于仂 (亰舒亰于亳舒亶, 从仂仍亳 仗仍舒仆于舒仍仆亳从 仗仂仂从于 亟仂弍亠亠 亟仂 仆仂亞仂). Andrii Hladkyi trilobt@gmail.com 5
  • 6. 仂从 仍 仂亞仂, 于舒仂于ム亳, 仂 仗仂仂从亳 仄仂亢 仗亠亠仄舒亳 仄亢 亞舒仆亳礆亳 亟仂亟舒从于 从仂仆亠从于, 从仂仍亳 亠 仗仂弍仆仂 CLR, 于亳 仗仂于亳仆仆 磦仍亳, 磻 舒仗亠从亳 仗仂亞舒仄亳 亰仄仆ミ火夷出術 于 仗仂仂从舒 (仆舒仗亳从仍舒亟, 仗亟亟舒ム 弍舒亞舒仂仗仂仂从仂于仂亞仂 亟仂仗), 舒 磻 仂仗亠舒 - 舒仂仄舒仆亳仄亳 (亰仄仆ミ火夷出術 于 仗仂仂从舒 仂仗亠舒 仆亠弍亠亰仗亠仆 ). 亊从仂 于亳亟仆亳亶 仗仂从 亠 仆亠 仗仂于仆 亰舒于亠亳于 于仂 仂仗亠舒, 亟亞亳亶 于亟仆亳亶 仗仂从 仄仂亢亠 仗仂弍舒亳亳 仂弍'从 于 舒从仂于仂 亰仄仆亠仆仂仄 舒仆. 丕 亠亶 仄仂仄亠仆 亟亞亳亶 仗仂从, 仗仂 , 亳舒 从亳于仆 亟舒仆, 仂 弍亠亰仄仂于仆仂 仄仂亢亠 仗亳亰于亠亳 亟仂 亟亢亠 亟亳于仆亳 仗仂仄亳仍仂从, 亰仆舒亶亳 仆舒仍舒亞仂亟亳亳 磻 仆舒于 亠 于舒亢亠. Andrii Hladkyi trilobt@gmail.com 6
  • 7. 舒亞舒仂仗仂仂仆 亟仂亟舒从亳 丱仂舒 仗仍舒仂仄舒 .NET 仆亠 仄仂亢亠 仗仂于仆 仗亳仂于舒亳 从仍舒亟仆仂, 仗仂于'磶舒仆 亰 仗仂弍亟仂于仂 仆舒亟亶仆亳 弍舒亞舒仂仗仂仂仆亳 亟仂亟舒从于, 亠亶 仗仂亠 于亠 亢 亰仆舒仆仂 仗仂亠仆亳亶. 亳从仂亳仂于ム亳 亳仗亳, 于亳亰仆舒亠仆 于亠亠亟亳仆 仗仂仂 仄亠仆 System.Threading, 弍弍仍仂亠从 Task Parallel Library (TPL) 于 .NET 4.0 于亳亠, 舒 舒从仂亢 从仍ム仂于 仍仂于舒 asinc await 仄仂于亳 C# 于 .NET 4.5, 仄仂亢仆舒 仗舒ミ火委亳 亰 弍亠亰仍 仗仂仂从于, 仗亳从仍舒亟舒ム亳 仄仆仄舒仍仆 亰亳仍仍. Andrii Hladkyi trilobt@gmail.com 7
  • 8. namespase System.Threading Andrii Hladkyi trilobt@gmail.com 8 丐亳仗 亳亰仆舒亠仆仆 Interlocked 丶亠亶 亳仗 仆舒亟舒 舒仂仄舒仆 仂仗亠舒 亟仍 亰仄仆仆亳, 仂亰亟仍亠仆亳 仄亢 亟亠从仍从仂仄舒 仗仂仂从舒仄亳 Monitor 丶亠亶 亳仗 亰舒弍亠亰仗亠 亳仆仂仆亰舒 仗仂仂从仂于亳 仂弍'从于, 于亳从仂亳仂于ム亳 弍仍仂从于舒仆仆 仂从于舒仆仆/亳亞仆舒仍亳. 仍ム仂于亠 仍仂于仂 lock 仄仂于亳 C # 亰舒仂仂于 "亰舒 仍舒仆从舒仄亳" 仂弍'从 Monitor Mutex 丶亠亶 仗亳仄亳于 亳仆仂仆亰舒 仄仂亢亠 于亳从仂亳仂于于舒亳 亟仍 亳仆仂仆亰舒 仄亢 亞舒仆亳礆亳 亟仂仄亠仆于 亟仂亟舒从于 Parameterized ThreadStart 丶亠亶 亟亠仍亠亞舒 亟仂亰于仂仍 仗仂仂从 于亳从仍亳从舒亳 仄亠仂亟亳, 磻 仗亳亶仄舒ム 亟仂于仍仆 从仍从 舒亞仄亠仆于 Semaphore 丶亠亶 亳仗 亟仂亰于仂仍 仂弍仄亠亢亳亳 从仍从 仗仂仂从于, 磻 仄仂亢 仄舒亳 亟仂仗 亟仂 亠 舒弍仂 亟仂 仗亠于仆仂亞仂 亳仗 亠于 仂亟仆仂舒仆仂 Thread 丶亠亶 亳仗 磦仍 仗仂从, 仂 于亳从仂仆 于 CLR-亠亠亟仂于亳. 亳从仂亳仂于ム亳 亠仂仗, 仄仂亢仆舒 仗仂仂亢亟舒亟仂仗仂仍仆亠仍仆亳亠 仗仂仂从亳 于 于亳亟仆仂仄 亟仂仄亠仆 亟仂亟舒从 ThreadPool 丶亠亶 亳仗 亟仂亰于仂仍 于亰舒仄仂亟亳 亰 仗亟亳仄于舒仆亳仄 CLR 仗仍仂仄 仗仂仂从于 于亠亠亟亳仆 亰舒亟舒仆仂亞仂 仗仂亠
  • 9. namespase System.Threading Andrii Hladkyi trilobt@gmail.com 9 丐亳仗 亳亰仆舒亠仆仆 ThreadPriority 丶亠 仗亠亠舒于舒仆仆 仗亠亟舒于仍 于亠仆 仗仂亳亠 仗仂仂从 (Highest, Normal .亟.) ThreadStart 丶亠亶 亟亠仍亠亞舒 亟仂亰于仂仍 于从舒亰舒亳 仄亠仂亟 亟仍 于亳从仍亳从 于 亰舒亟舒仆仂仄 仗仂仂. 舒 于亟仄仆 仂亟亠仍亠亞舒舒 ParametrizedThreadStart, 仍仂于 仄亠仂亟亳 ThreadStart 亰舒于亢亟亳 仗仂于亳仆仆 仄舒亳 仂亟亳仆 仂亶 亢亠 仗仂仂亳仗 ThreadState 丶亠 仗亠亠舒于舒仆仆 亰舒亟舒 亟仂仗亳仄 舒仆 仗仂仂从 (Running, Aborted .亟.) Timer 丶亠亶 亳仗 仆舒亟舒 仄亠舒仆亰仄 于亳从仂仆舒仆仆 仄亠仂亟 亠亠亰 亰舒亰仆舒亠仆 仆亠于舒仍亳 舒 TimerCallback 丶亠亶 亳仗 亟亠仍亠亞舒舒 于亳从仂亳仂于 于 仗仂亟仆舒仆仆 亰 亳仗舒仄亳 Timer
  • 10. 弌舒亳仆 仍亠仆亳 从仍舒 Thread Andrii Hladkyi trilobt@gmail.com 10 丐亳仗 亳亰仆舒亠仆仆 CurrentContext 丶 于仍舒亳于, 仗亳亰仆舒亠仆舒 仍从亳 亟仍 亳舒仆仆, 仗仂于亠舒 从仂仆亠从, 于 磻仂仄 于 亟舒仆亳亶 仄仂仄亠仆 于亳从仂仆 仗仂从 CurrentThread 丶亠 于仍舒亳于, 仗亳亰仆舒亠仆舒 仍从亳 亟仍 亳舒仆仆, 仗仂于亠舒 仗仂亳仍舒仆仆 仆舒 仗仂仂仆亳亶 于亳从仂仆于舒仆亳亶 仗仂从 GetDomain() GetDomainID() 丶亠亶 仄亠仂亟 仗仂于亠舒 仗仂亳仍舒仆仆 仆舒 仗仂仂仆亳亶 亟仂仄亠仆 亟仂亟舒从舒 舒弍仂 亟亠仆亳从舒仂 亟仂仄亠仆, 于 磻仂仄 于亳从仂仆 仗仂仂仆亳亶 仗仂从 Sleep() 丶亠亶 仄亠仂亟 仗亳亰仗亳仆 仗仂仂仆亳亶 仗仂从 仆舒 亰舒亰仆舒亠仆亳亶 舒
  • 11. 丼仍亠仆亳 于仆 亠从亰亠仄仗仍舒 从仍舒 Thread Andrii Hladkyi trilobt@gmail.com 11 丐亳仗 亳亰仆舒亠仆仆 IsAlive 仂于亠舒 弍仍亳于从亠 亰仆舒亠仆仆, 磻亠 于从舒亰 仆舒 亠, 亳 亰舒仗亠仆亳亶 仗仂从 ( 仗仂从亳 亠 仆亠 仗亠亠于舒仆亳亶 仆亠 从舒仂于舒仆亳亶) IsBackground 亳仄 舒弍仂 于舒仆仂于仍ム 亰仆舒亠仆仆, 磻亠 于从舒亰, 亳 亟舒仆亳亶 仗仂从 仂仆仂于亳仄 Name 仂亰于仂仍 于舒仆仂于亳亳 亟亢仆 亠从仂于亠 仄' 仗仂仂从 Priority 亳仄 舒弍仂 于舒仆仂于仍ム 仗仂亳亠 仗仂仂从, 磻亳亶 仄仂亢亠 仗亳亶仄舒亳 亰仆舒亠仆仆 亰 仗亠亠舒于舒仆仆 ThreadPriority ThreadState 亳仄 舒仆 亟舒仆仂亞仂 仗仂仂从, 磻亠 仄仂亢亠 仗亳亶仄舒亳 亰仆舒亠仆仆 亰 仗亠亠舒于舒仆仆 ThreadState
  • 12. 丼仍亠仆亳 于仆 亠从亰亠仄仗仍舒 从仍舒 Thread Andrii Hladkyi trilobt@gmail.com 12 丐亳仗 亳亰仆舒亠仆仆 Abort() 从舒亰 CLR-亠亠亟仂于亳 仆舒 仆亠仂弍亟仆 仗亳仗亳仆亠仆仆 仗仂仂从, 磻 仍从亳 亠 弍亟亠 仄仂亢仍亳于仂 Interrupt() 亠亠亳于舒 (仗亳亰仗亳仆) 仗仂仂仆亳亶 仗仂从 仆舒 于亟仗仂于亟仆亳亶 仗亠仂亟 仂从于舒仆仆 Join() 仍仂从 于亳从仍亳从舒ム亳亶 仗仂从 亟仂 亳 仗, 仗仂从亳 于从舒亰舒仆亳亶 仗仂从 (仂亶, 仆舒 磻仂仄 于亳从仍亳从舒仆亳亶 仄亠仂亟 Join ()) 仆亠 亰舒于亠亳 Resume() 亟仆仂于仍ム 舒仆亠 仗亳亰仗亳仆亠仆亳亶 仗仂从 Start() 从舒亰 CLR-亠亠亟仂于亳 仆舒 仆亠仂弍亟仆 亰舒仗从 仗仂仂从, 磻 仍从亳 亠 弍亟亠 仄仂亢仍亳于仂 Suspend() 亳亰仗亳仆 仗仂从. 亊从仂 仗仂从 于亢亠 仗亳仗亳仆亠仆亳亶, 于亳从仍亳从 Suspend () 仆亠 亟舒 仆磻仂亞仂 亠亠从
  • 14. 仆亠 于仂亠仆仆 于仂亳仆仆亳 仗仂仂从于 仂从亳 亟仍 仆仂亞仂 于仂亠仆仆 仗仂仂从: 1. 弌于仂 仄亠仂亟, 磻亳亶 弍亟亠 仍亢亳亳 仂从仂 于仂亟 亟仍 仆仂于仂亞仂 仗仂仂从. 2. 弌于仂 仆仂于亳亶 亠从亰亠仄仗仍 亟亠仍亠亞舒舒 ParametrizedThreadStart (舒弍仂 ThreadStart), 仗亠亠亟舒于亳 从仂仆从仂 舒亟亠 仄亠仂亟, 磻亳亶 弍于 于亳亰仆舒亠仆亳亶 仆舒 从仂 1. 3. 弌于仂 仂弍'从 Thread, 仗亠亠亟舒于亳 从仂仆从仂 磻 舒亞仄亠仆 亟亠仍亠亞舒 ParametrizedThreadStart/ThreadStart. 4. 舒仆仂于 仗仂舒从仂于 舒舒从亠亳亳从亳 仗仂仂从 (仄', 仗仂亳亠 .亟.). 5. 亳从仍亳亠 仄亠仂亟 Thread.Start(). 丶亠 仗亳亰于亠亟亠 亟仂 亰舒仗从 CLR- 亠亠亟仂于亳亠仄 仗仂仂从 亟仍 仄亠仂亟, 仆舒 磻亳亶 仗仂亳仍舒 亟亠仍亠亞舒, 于仂亠仆亳亶 仆舒 从仂 2, 仗亳 仗亠亶 亢亠 仄仂亢仍亳于仂. Andrii Hladkyi trilobt@gmail.com 14
  • 16. 仂仍 亟亠仍亠亞舒于 .NET 亠仍亠亞舒 .NET - 亠 仗仂 弍亠亰仗亠仆亳亶 仂亟仂 亳仗于, 仂弍'从仆仂- 仂仆仂于舒仆亳亶 仗仂从舒亢亳从 仆舒 仆从. 亳仗 亟亠仍亠亞舒舒, .NET 从仂仄仗仍仂 C# 仗仂弍亟 亰舒仗亠舒舒仆亳亶 从仍舒, 仆舒仍亟于舒仆仂亞仂 于亟 System.MulticastDelegate. 丶 弍舒亰仂于 从仍舒亳 仆舒亟舒ム 从仂亢仆仂仄 亟亠仍亠亞舒 仄仂亢仍亳于 仗亟亳仄于舒亳 仗亳仂从 舒亟亠于 仄亠仂亟于, 磻 仄仂亢 弍亳 于亳从仍亳从舒仆 于 弍仍 仗亰仆亶 舒. public sealed class BinaryOperation : System.MulticastDelegate { public BinaryOperation(object target, uint functionAddress); public int Invoke(int x, int ) ; public IAsyncResult BeginInvoke(intx, int y, AsyncCallback cb, object state); public int EndInvoke(IAsyncResult result); } Andrii Hladkyi trilobt@gmail.com 16
  • 17. 亳仆仂仆仆舒 仗亳仂亟舒 亟亠仍亠亞舒于 仂仍亳 从仂仄仗仍仂 C# 仂弍仂弍仍 从仍ム仂于亠 仍仂于仂 delegate, 于仆 亟亳仆舒仄仆仂 亞亠仆亠 从仍舒, 磻亳亶 于亳亰仆舒舒 亟于舒 仄亠仂亟亳 亰 仄亠仆舒仄亳 BeginInvoke() EndInvoke(). public sealed class BinaryOperation : System.MulticastDelegate { // 亳从仂亳仂于 亟仍 舒亳仆仂仆仆仂亞仂 于亳从仍亳从 仄亠仂亟 public IAsyncResult BeginInvoke(int x, int , AsyncCallback cb, object state); // 亳从仂亳仂于 亟仍 仂亳仄舒仆仆 亰仆舒亠仆仆, 仂 仗仂于亠舒 // 于亳从仍亳从舒仆亳仄 仄亠仂亟仂仄. public int EndInvoke(IAsyncResult result); } Andrii Hladkyi trilobt@gmail.com 17
  • 18. 仆亠亠亶 IAsyncResult 亠仂亟 BeginInvoke() 亰舒于亢亟亳 仗仂于亠舒 仂弍'从, 磻亳亶 亠舒仍亰 仆亠亠亶 IAsyncResult, 于 仂亶 舒 磻 EndInvoke() 于亳仄舒亞舒 亟亳仆亳亶 仗舒舒仄亠 仄仆仂亞仂 亰 IAsyncResult 亳仗. 弌仄仆亳亶 亰 IAsyncResult 仂弍'从, 仂 仗仂于亠舒 亰 BeginInvoke() - 亠 于 仂仆仂于仆仂仄 亰于'磶ム亳亶 仄亠舒仆亰仄, 磻亳亶 亟仂亰于仂仍 于亳从仍亳从舒ム仂仄 仗仂仂从 仂亳仄舒亳 亠亰仍舒 于亳从仍亳从 舒亳仆仂仆仆仂亞仂 仄亠仂亟 亠亠亰 EndInvoke() 于 弍仍 仗亰仆亶 舒. public interface IAsyncResult { object AsyncState { get; } WaitHandle AsyncWaitHandle { get; } bool CompletedSynchronously { get; } bool IsCompleted { get; } } 亠仂亟, 磻亳亶 仗仂于亠舒 void, 仄仂亢仆舒 仗仂仂 于亳从仍亳从舒亳 舒亳仆仂仆仆仂 亰舒弍亳. Andrii Hladkyi trilobt@gmail.com 18
  • 19. 弌亳仆仂仆亰舒 于亳从仍亳从舒ム仂亞仂 仗仂仂从 乂仂弍 亟仂亰于仂仍亳亳 于亳从仍亳从舒ム仂仄 仗仂仂从 亰'仂于于舒亳, 亳 亰舒于亠亳于 于仂 仂弍仂 舒亳仆仂仆仆仂 于亳从仍亳从舒仆亳亶 仄亠仂亟, 于 仆亠亠亶 IAsyncResult 仗亠亠亟弍舒亠仆仂 于仍舒亳于 IsCompleted. 亟仂仗仂仄仂亞仂 于亳从仍亳从舒ム亳亶 仗仂从 仄仂亢亠 于亳亰仆舒舒亳, 亳 亟亶仆仂 舒亳仆仂仆仆亳亶 于亳从仍亳从 弍于 亰舒于亠亠仆亳亶, 仗亠 仆亢 亰于亠舒亳 亟仂 EndInvoke(). 亊从仂 仄亠仂亟 亠 仆亠 亰舒于亠亳于, 于仍舒亳于 IsCompleted 仗仂于亠舒 false, Andrii Hladkyi trilobt@gmail.com 19
  • 20. 仂仍 亟亠仍亠亞舒舒 AsyncCallback 舒仄 仂仗亳于舒仆仆 亟亠仍亠亞舒舒 亰 仄亠仂 于亳亰仆舒亠仆仆, 亳 亰舒于亠亳于 舒亳仆仂仆仆仂 于亳从仍亳从舒仆亳亶 仄亠仂亟, 弍仍仂 弍 弍仍 亠亠从亳于仆仂 亰仄亳亳 于仂亳仆仆亳亶 仗仂从 仆仂仄于舒亳 于亳从仍亳从舒ム亳亶 仗仂从 仗仂 亰舒于亠亠仆仆 于亳从仂仆舒仆仆 亰舒于亟舒仆仆. 乂仂弍 于从仍ム亳亳 舒从 仗仂于亠亟仆从, 亰仆舒亟仂弍亳 仗亠亠亟舒亳 仄亠仂亟 BeginInvoke() 亠从亰亠仄仗仍 亟亠仍亠亞舒舒 System.AsyncCallback. 仂仍亳 仗亠亠亟舒 仂弍'亠从 AsyncCallback, 亟亠仍亠亞舒 弍亟亠 舒于仂仄舒亳仆仂 于亳从仍亳从舒亳 于从舒亰舒仆亳亶 仄亠仂亟 仗仂 亰舒于亠亠仆仆 舒亳仆仂仆仆仂亞仂 于亳从仍亳从. 亠仂亟 亰于仂仂仆仂亞仂 于亳从仍亳从 弍亟亠 于亳从仍亳从舒仆亳亶 于仂亳仆仆仂仄 仗仂仂, 舒 仆亠 于 仗亠于亳仆仆仂仄. Andrii Hladkyi trilobt@gmail.com 20
  • 21. 亠亠亟舒舒 仂亳仄舒仆仆 仗亠舒仍仆亳 亟舒仆亳 舒仆 个仆舒仍仆亳仄 舒仗亠从仂仄 舒亳仆仂仆仆亳 亟亠仍亠亞舒于, 磻亳亶 仗仂于亳仆亠仆 弍亳 于舒仂于舒仆亳亶, 仂舒仆仆亶 舒亞仄亠仆 仄亠仂亟 BeginInvoke(). 丶亠亶 仗舒舒仄亠 亟仂亰于仂仍 仗亠亠亟舒于舒亳 亟仂亟舒从仂于 仆仂仄舒 仗仂 舒仆 仄亠仂亟 亰于仂仂仆仂亞仂 于亳从仍亳从 亰 仗亠于亳仆仆仂亞仂 仗仂仂从. 仍 仂亳仄舒仆仆 亳 亟舒仆亳 于 从仂仆亠从 仄亠仂亟 亰于仂仂仆仂亞仂 于亳从仍亳从 于亳从仂亳仂于 于仍舒亳于 AsyncState 于亟仆仂亞仂 仗舒舒仄亠舒 IAsyncResult. Andrii Hladkyi trilobt@gmail.com 21
  • 23. 仍 仗仂仂从于 CLR 亳 舒亳仆仂仆仆仂仄 于亳从仍亳从 仄亠仂亟 亰 于亳从仂亳舒仆仆礆 亳仗于 亟亠仍亠亞舒于 (亠亠亰 仄亠仂亟 BeginInvoke()) 亠亠亟仂于亳亠 CLR 仆舒仗舒于亟 仆亠 于仂ム 仆仂于亳亶 仗仂从. 仄亠仂 亠亠从亳于仆仂 仄亠仂亟 BeginInvoke() 亟亠仍亠亞舒舒 亰舒亟 仗仍 仂弍仂亳 仗仂仂从于, 磻亳亶 仗亟亳仄 于亳从仂仆ム亳仄 亠亠亟仂于亳亠仄. 仍 于亰舒仄仂亟 亰 亳仄 仗仍仂仄 于 仗仂仂 仄亠仆 System.Threading 仗亠亠亟弍舒亠仆亳亶 从仍舒 ThreadPool. 乂仂弍 亰舒仗仂亳亳 仗仂从 亰 仗仍 亟仍 仂弍仂弍从亳 于亳从仍亳从 仄亠仂亟, 仄仂亢仆舒 从仂亳舒亳 仄亠仂亟仂仄 ThreadPool.QueueUserWorkItem(WaitCallback callBack); ThreadPool.QueueUserWorkItem(WaitCallback callBack, object state); Andrii Hladkyi trilobt@gmail.com 23
  • 24. 仍 仗仂仂从于 CLR 亠亠于舒亞亳 于亰舒仄仂亟 亰 仗亟亳仄于舒仆亳仄 亠亠亟仂于亳亠仄 CLR 仗仍仂仄 仗仂仂从于 于 仗仂于仆礌仆 亰 磦仆亳仄 于仂亠仆仆礆 仂弍'从于 Thread? 1. 仍 仗仂仂从于 仗舒于仍 仗仂仂从舒仄亳 亠亠从亳于仆亳仄 亳仆仂仄, 亰于仂亟亳 亟仂 仄仆仄仄 从仍从 于仂ミ火夷出狐, 亰舒仗从舒ム亳 亰仗亳仆ム亳 仗仂仂从于. 2. 舒 舒仆仂从 于亳从仂亳舒仆仆 仗仍 仗仂仂从于 仄仂亢仆舒 亰仂亠亠亟亳亳 仆舒 于亳亠仆仆 亰舒于亟舒仆仆, 舒 仆亠 仆舒 仗仂仂从仂于亶 仆舒从 亟仂亟舒从舒. 仂亠, 于 亟亠磻亳 于亳仗舒亟从舒 仆亠 仗舒于仍仆仆 仗仂仂从舒仄亳 于亳磦仍 从舒亳仄. 仂仍亳 仗仂弍仆 仗仂仂从亳 仗亠亠亟仆仂亞仂 仗仍舒仆 舒弍仂 仗仂于亳仆亠仆 弍亳 于舒仆仂于仍亠仆亳亶 仗仂亳亠 仗仂仂从. 仂仂从亳 亰 仗仍 亰舒于亢亟亳 仂仆仂于亳仄亳 仄舒ム 舒仆亟舒仆亳亶 仗仂亳亠 (ThreadPriority. Normal). 仂仍亳 仗仂弍仆仂 仗仂从 亰 从仂于舒仆仂 亟亠仆亳仆, 仂弍 亶仂亞仂 仄仂亢仆舒 弍仍仂 仗亠仗亠亳于舒亳, 仗亳亰仗亳仆亳 舒弍仂 亰仆舒仂亟亳亳 仗仂 仄亠仆. Andrii Hladkyi trilobt@gmail.com 24