เบเปเบฒโเบเบฐโเปเบเบปเปเบฒโเปเบเปโเบเบดเบกโเปเบเบตเบโเปเบเปโเบเบปเบโเบเบงเบฒเบกโเบเบปเปเบโเบชเบฐโเบเบฑเบโเบเปเบฝเบงโเบเบฑเบ Habr, เบเบฒเบโเปเบโเบเบฒโเบชเบฒโเบเบตเปโเปเบเปโเบฎเบฑเบโเบเบฒเบโเบเบฑเบโเบเบตเบกโเบกเบฒโเปเบโเบเปโเบฅเบดโเบชเบฑเบ
เบเบงเบฒเบกเบเปเบญเบเบเบฒเบเบเบตเปเบเบฐเปเบฎเบฑเบเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบ asynchronously, เปเบเบเบเปเปเบกเบตเบเบฒเบเบฅเปเบเปเบฒเบเบปเบเปเบเปเบฎเบฑเบเบขเบนเปเบเบตเปเบเบตเปเปเบฅเบฐเปเบเบเบฑเบเบเบธเบเบฑเบ, เบซเบผเบทเบเบฒเบเปเบเปเบเบงเบฝเบเบเบฐเบซเบเบฒเบเปเบซเบเปเบฅเบฐเบซเบงเปเบฒเบเบซเบผเบฒเบเบซเบเปเบงเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบกเบฑเบ, เบกเบตเบขเบนเปเบเปเบญเบเบเบฒเบเบกเบฒเบเบญเบเบเบญเบกเบเบดเบงเปเบเบต. เบเปเบงเบเบเบฒเบเบกเบฒเปเบเบดเบเบเบญเบเบเบงเบเปเบเบปเบฒ, เบเบงเบฒเบกเบเปเบญเบเบเบฒเบเบเบตเปเปเบเปเบเบฒเบเปเบเบฑเบเบเบตเปเบเบฑเบเปเบเบเบซเบผเบฒเบ. เปเบเบเบฑเบเบเบธเบเบฑเบ, เปเบเบเบต 2019, เบเปเบญเบเบเปเบฒเบฅเบฑเบเบเบดเบกเบเบปเบเบเบงเบฒเบกเบเบตเปเบขเบนเปเปเบเบเบญเบกเบเบดเบงเปเบเบตเปเบเบเบเบธเบเบเบตเปเบกเบตเปเบเปเบเบเปเบเบต Intel Core 8-core, เปเบเบดเปเบเบกเบตเบซเบผเบฒเบเบเบงเปเบฒเบซเบเบถเปเบเบฎเปเบญเบเบเบฐเบเบงเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฐเบซเบเบฒเบ, เปเบฅเบฐเปเบกเปเบเบฐเบเบฑเปเบเบซเบผเบฒเบเบเบฐเบเบนเป. เบขเบนเปเปเบเปเป, เบกเบตเปเบเบฅเบฐเบชเบฑเบเบเบตเปเบเบตเปเบฎเปเบฒเบเปเบฅเบฑเบเบเปเบญเบ, เบเบทเปเบชเบญเบเบชเบฒเบกเบเบตเบเปเบญเบ, เบกเบฑเบเบกเบตเปเบเปเบเบเปเบเบต 8-core เบขเบนเปเปเบเบดเบเปเบฎเบทเบญ. เบเบฑเบเบเบฐเบเบฒเบเบญเบเบซเบปเบงเบเปเปเปเบกเปเบเปเบเบฑเบกเปเบเบเปเบงเบเบเบปเบเบเบงเบฒเบกเปเบฅเบฐเบงเบดเบเบตเปเบญเบเบตเปเบเบนเปเบเบฝเบเบเบญเบเบเบงเบเปเบเบปเบฒเบเบปเบกเปเบเบตเบเปเบเบฅเบฐเบชเบฑเบเบชเบฐเบซเบผเบฒเบ flagship เปเบเบเบตเบเบตเปเบเบตเปเบกเบตเปเบเปเบเบเปเบเบต 16-core. MS Azure เบชเบฐเปเบญเบเปเบเบทเปเบญเบเบชเบฐเปเปเบทเบญเบเบเบฑเบเปเบเปเบเบเปเบเบต 20 core เปเบฅเบฐ RAM 128 TB เปเบเบฅเบฒเบเบฒเบเปเปเบฒเบเบงเปเบฒ $2/เบเบปเปเบงเปเบกเบ. เปเบเปเบซเบเปเบฒเปเบชเบเบเบฒเบ, เบกเบฑเบเปเบเบฑเบเปเบเบเปเปเปเบเปเบเบตเปเบเบฐเบชเบฐเบเบฑเบเบชเบนเบเบชเบธเบเปเบฅเบฐ harness เบเบฐเบฅเบฑเบเบเบฒเบเบเบตเปเปเบเบเบเปเปเบชเบฒเบกเบฒเบเบเบฑเบเบเบฒเบเบเบฒเบเปเบเปเบเบญเบเบเบญเบเบเบฐเบเบนเป.
Terminology
เบเบฐเบเบงเบเบเบฒเบ - เบงเบฑเบเบเบธ OS, เบเบทเปเบเบเบตเปเบเบตเปเบขเบนเปเปเบเบเบเปเบฝเบง, เบกเบตเบเบฐเบเบนเป.
เบเบฐเบเบนเป - เบงเบฑเบเบเบธ OS, เบซเบเปเบงเบเบเบฒเบเบเบตเปเบเปเบญเบเบเบตเปเบชเบธเบเบเบญเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ, เบชเปเบงเบเบซเบเบถเปเบเบเบญเบเบเบฐเบเบงเบเบเบฒเบ, เบเบฐเบเบนเปเปเบเปเบเบเบฑเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเปเบฅเบฐเบเบฑเบเบเบฐเบเบฒเบเบญเบเบญเบทเปเบเปเบฅเบฐเบซเบงเปเบฒเบเปเบเบปเบฒเปเบเบปเปเบฒเบเบฒเบเปเบเบเบฐเบเบงเบเบเบฒเบ.
Multitasking - เบเบธเบเบชเบปเบกเบเบฑเบ OS, เบเบงเบฒเบกเบชเบฒเบกเบฒเบเปเบเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบซเบผเบฒเบเบเบฐเบเบงเบเบเบฒเบเบเปเบญเบกเปเบเบฑเบ
เบซเบผเบฒเบเบซเบผเบฑเบ - เบเบธเบเบชเบปเบกเบเบฑเบเบเบญเบเปเบเปเบเบเปเบเบต, เบเบงเบฒเบกเบชเบฒเบกเบฒเบเปเบเบเบฒเบเบเปเบฒเปเบเปเบซเบผเบฒเบเปเบเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฐเบกเบงเบเบเบปเบเบเปเปเบกเบนเบ
Multiprocessing - เบเบธเบเบชเบปเบกเบเบฑเบเบเบญเบเบเบญเบกเบเบดเบงเปเบเบต, เบเบงเบฒเบกเบชเบฒเบกเบฒเบเปเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเปเบญเบกเปเบเบฑเบเบเบฑเบเปเบเปเบเบเปเบเบตเบซเบผเบฒเบเบเบปเบง
Multithreading โ เบเบฑเบโเบชเบดเบโเบเบญเบโเบเบฐโเบเบงเบโเบเบฒเบโ, เบเบงเบฒเบกโเบชเบฒโเบกเบฒเบโเปเบโเบเบฒเบโเปเบเบโเบขเบฒเบโเบเบฒเบโเบเบธเบโเปเบเปเบโเบเปเปโเบกเบนเบโเปเบโเบเบฑเบโเบเบฒโเบซเบผเบฒเบโเบเบฐโเบเบนเปโ.
เบเบฐเปเบฒเบ - เบเบฐเบเบดเบเบฑเบเบซเบผเบฒเบเปเบเบฑเปเบเบเบฒเบเบฎเปเบฒเบเบเบฒเบเบเปเบญเบกเปเบเบฑเบเบเปเปเบซเบปเบงเปเปเบงเบเปเบงเบฅเบฒ
Asynchrony โ เบเบฒเบโเบเบฐโเบเบดโเบเบฑเบโเบเบฒเบโเบเปเบฒโเปเบเบตเบโเบเบฒเบโเปเบเบโเบเปเปโเบกเบตโเบเบฒเบโเบฅเปโเบเปเบฒโเบชเปเบฒโเบฅเบฑเบโเบเบฒเบโเบชเปเบฒโเปเบฅเบฑเบโเบเบญเบโเบเบฒเบโเบเบธเบโเปเบเปเบโเบเบตเปโเบเบปเบโเบเบญเบโเบเบฒเบโเบเบฐโเบเบดโเบเบฑเบโเบชเบฒโเบกเบฒเบโเปเบเปโเบฎเบฑเบโเบเบฒเบโเบเบฐโเบเบดโเบเบฑเบโเบเบฒเบโเบซเบผเบฑเบโ.
เบเบฒเบเบเบฝเบเบเบฝเบ
เบเปเปเปเบกเปเบเบเปเบฒเบเบดเบเบฒเบกเบเบฑเบเบซเบกเบปเบเปเบกเปเบเบเบตเปเบฅเบฐเบเบฒเบเบญเบฑเบเบเปเบญเบเบเบฒเบเบเปเบฒเบญเบฐเบเบดเบเบฒเบเปเบเบตเปเบกเปเบเบตเบก, เบเบฑเปเบเบเบฑเปเบเบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเปเบเบตเปเบกเบเปเบฒเบญเบธเบเบฐเบกเบฒเบเปเบฝเบงเบเบฑเบเบเบฒเบเปเบเปเบเบเบดเบเบญเบฒเบซเบฒเบเปเบเบปเปเบฒเปเบเบฑเบเบเปเบฒเบชเบฑเบเบเบตเปเปเบเบฐเบเปเบฒเบขเปเบฒเบเปเบเบฑเบเบเบฒเบเบเบฒเบ. เบเบฒเบเปเบเปเบเบเบดเบเบญเบฒเบซเบฒเบเปเบเบปเปเบฒเปเบเบเปเบฒเบเบฝเบเบเบฝเบเบเบตเปเปเบกเปเบเบเบฐเบเบงเบเบเบฒเบ.
เปเบเบเบฐเบเบฐเบเบตเปเบเบฐเบเบฝเบกเบญเบฒเบซเบฒเบเปเบเบปเปเบฒเปเบเบเบญเบเปเบเบปเปเบฒเบเปเบญเบ (CPU) เบเปเบญเบเบกเบฒเปเบฎเบทเบญเบเบเบปเบง (เบเบญเบกเบเบดเบงเปเบเบต). เบเปเบญเบเบกเบต 2 เบกเบท (Cores). เบกเบตเบญเบธเบเบฐเบเบญเบเบเปเบฒเบเบงเบเบซเบเบถเปเบเบขเบนเปเปเบเปเบฎเบทเบญเบเบเบปเบง (IO): เปเบเบปเบฒเบญเบปเบ, เปเบเบปเบฒเบญเบปเบ, เปเบเบปเบฒเบญเบปเบ, เบเบนเปเปเบขเบฑเบ. เบเปเบญเบเปเบเบตเบเบญเบฒเบเปเบเบฑเบช, เปเบญเบปเบฒเปเบเบปเบฒเบเบปเปเบงเปเบชเปเบกเบฑเบเปเบฅเบฐเบเบญเบเบเปเปเบฒเบกเบฑเบเปเบชเปเบกเบฑเบเปเบเบเบเปเปเบเปเบญเบเบฅเปเบเปเบฒเปเบซเปเบกเบฑเบเบฎเปเบญเบ (asynchronously, Non-blocking-IO-Wait), เปเบญเบปเบฒเปเบเปเบญเบญเบเบเบฒเบเบเบนเปเปเบขเบฑเบเปเบฅเบฐเปเบเบเบกเบฑเบเปเบเบปเปเบฒเปเบเปเบเปเบเปเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบตเบกเบฑเบเบเปเบงเบเบกเบทเบซเบเบถเปเบ (เบเบฐเบเบนเป #1), เปเบฅเบฐเบเบตเบชเบญเบ (เบเบฐเบเบนเป #2) เบเบทเปเบเปเบ (เบเบฑเบเบเบฐเบเบฒเบเบญเบเบเบตเปเปเบเปเบเบเบฑเบ). เบเบฝเบงเบเบตเปเบเปเบญเบเบขเบฒเบเปเบเบตเบเบเบฐเบเบธเบ, เปเบเปเบเปเบญเบเบเปเปเบกเบตเบกเบทเบเป (เบเบงเบฒเบกเบญเบถเบเบซเบดเบงเบเบฐเบเบนเป) เปเบโเบฅเบฐโเบซเบงเปเบฒเบโเปเบงโเบฅเบฒโเบเบตเปโ, เปเบเป frying เปเบเป heats เปเบเบดเบ (เบเบฒเบโเบเบธเบโเปเบเปเบโเบเบปเบโเปเบเปโเบฎเบฑเบโ) เปเบเบปเปเบฒโเปเบโเปเบโเบเบตเปโเบเปเบฒโเบเบฐโเปเบเบปเปเบฒโเบเบฒเบกโเบชเบดเปเบโเบเบตเปโเบเปเบฒโเบเบฐโเปเบเบปเปเบฒโเปเบเป whippedโ. เบเปเบฒโเบเบฐโเปเบเบปเปเบฒโเปเบญเบทเปเบญเบกโเปเบเบดเบโเบเบฐโเบเบธเบโเปเบฅเบฐโเปเบเบตเบโเบกเบฑเบโเปเบฅเบฐ stupidly เปเบเบดเปเบโเบโเปโเปโเบฒโเบเบปเปเบกโเปเบโเบกเบฑเบ (เบเบฒเบเบเบฑเบเบเบงเบฒเบ-IO-เบฅเปเบเปเบฒ), เปเบเบดเบเปเบกเปเบเบงเปเบฒเปเบเบฅเบฐเบซเบงเปเบฒเบเปเบงเบฅเบฒเบเบตเปเบฅเบฒเบงเบชเบฒเบกเบฒเบเบฅเปเบฒเบเบเบฒเบเบเปเบญเบเบเบตเปเบฅเบฒเบงเบเบต omelet เปเบเป.
เบเปเบฒโเบเบฐโเปเบเบปเปเบฒโเบเบธเบโเปเบเปเบ omelette เปเบเบโเปเบเปโเบเบฝเบโเปเบเป 2 เบกเบทโ, เปเบฅเบฐโเบเปเบฒโเบเบฐโเปเบเบปเปเบฒโเบเปเปโเบกเบตโเบซเบผเบฒเบโ, เปเบเปโเปเบโเบเบฐโเบเบฐโเบเบฝเบงโเบเบฑเบโ, เปเบโเบเบฑเบโเบเบธโเบเบฑเบโเบเบญเบโเบเบฒเบ whipping omelette เปเบเปโ, เบเบฒเบโเบเปเบฒโเปเบเบตเบโเบเบฒเบ 3 เบเบฑเปเบโเปเบเปโเปเบเบตเบโเบเบถเปเบโเปเบโเปเบงโเบฅเบฒโเบเบฝเบงโเบเบฑเบโ: whipping omeletteโ, เบเบทโเบเบฒเบโ, เปเบเปโเบฎเปเบญเบโ. . CPU เปเบกเปเบเบชเปเบงเบเบเบตเปเปเบงเบเบตเปเบชเบธเบเบเบญเบเบเบญเบกเบเบดเบงเปเบเบต, IO เปเบกเปเบเบชเบดเปเบเบเบตเปเบชเปเบงเบเบซเบผเบฒเบเบกเบฑเบเบเบฐเบเปเบฒเบฅเบปเบ, เบเบฑเปเบเบเบฑเปเบเปเบฅเบทเปเบญเบเปเบเบฒเบเปเบเปเปเบเบเบตเปเบกเบตเบเบฐเบชเบดเบเบเบดเบเบฒเบเบเบทเบเบฒเบเบเบญเบเบเบญเบ CPU เบเบฑเบเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเปเบเบเบฐเบเบฐเบเบตเปเปเบเปเบฎเบฑเบเบเปเปเบกเบนเบเบเบฒเบ IO.
เบชเบทเบเบเปเปเบเบฒเบเบเบฝเบเบเบฝเบ:
- เบเปเบฒเบขเบนเปเปเบเบเบฐเบเบงเบเบเบฒเบเบเบฐเบเบฝเบก omelet, เบเปเบญเบเบเปเปเบเบฐเบเบฒเบเบฒเบกเบเปเบฝเบเปเบเบทเปเบญเบเบเบธเปเบ, เบเบตเปเบเบฐเปเบเบฑเบเบเบปเบงเบขเปเบฒเบเบเบญเบเบเบฒเบเปเบฎเบฑเบเบซเบผเบฒเบเบงเบฝเบ. เปเบเบฑเบ nuance เบเบตเปโเบชเปเบฒโเบเบฑเบโ: เบเบญเบกโเบเบดเบงโเปเบเบตโเปเบกเปเบโเบเบตเบโเบงเปเบฒโเบซเบผเบฒเบโเปเบโเบเบตเปโเบโเปโเบงเบฒโเบเบปเบโ.
- เปเบฎเบทเบญเบเบเบปเบงเบเบตเปเบกเบตเบเปเปเบเบปเบงเบซเบผเบฒเบเบเบปเบ, เบเบปเบงเบขเปเบฒเบเปเบเบฎเปเบฒเบเบญเบฒเบซเบฒเบ - เบเบญเบกเบเบดเบงเปเบเบตเบซเบผเบฒเบเบซเบผเบฑเบ.
- เบฎเปเบฒเบเบญเบฒเบซเบฒเบเบเปเบฒเบเบงเบเบซเบผเบฒเบเบขเบนเปเปเบเบชเบนเบเบญเบฒเบซเบฒเบเปเบเบชเบนเบเบเบฒเบเบเปเบฒ - data center
.NET เปเบเบทเปเบญเบเบกเบท
.NET เปเบกเปเบเบเบตเปเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบฐเบเบนเป, เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบเบชเบดเปเบเบญเบทเปเบเปเบเปเบฒเบเบงเบเบซเบผเบฒเบ. เบเปเบงเบเปเบเปเบฅเบฐเบฎเบธเปเบเปเบซเบกเป, เบกเบฑเบเปเบเบฐเบเปเบฒเปเบเบทเปเบญเบเบกเบทเปเบซเบกเปเปเบซเบผเบฒเบเบเบทเปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบงเบเบกเบฑเบ, เบเบฑเปเบเปเบซเบกเปเบเบญเบ abstraction เปเบเปเบฅเบเบฐเบเบฐเบเบนเป OS. เปเบเปเบงเบฅเบฒเบเบตเปเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบฒเบเบเปเปเบชเปเบฒเบเบเบญเบ abstractions, เบเบฑเบเบเบฑเบเบเบฐเบเบฒเบเบญเบเบเบฒเบเบเปเบฒเปเบเปเบงเบดเบเบตเบเบฒเบเบเบตเปเบเปเบญเบเปเบซเปเปเบญเบเบฒเบ, เปเบเปเบงเบฅเบฒเบเบตเปเบเปเบฒเปเบเป abstraction เบฅเบฐเบเบฑเบเบชเบนเบ, เบฅเบปเบเบซเบเบถเปเบเบซเบผเบทเบซเบผเบฒเบเบฅเบฐเบเบฑเบเบเปเบฒเบเบฅเบธเปเบกเบเบตเป. เบชเปเบงเบเบซเบผเบฒเบเบกเบฑเบ, เบเบตเปเบเปเปเปเบกเปเบเบเบงเบฒเบกเบเปเบฒเปเบเบฑเบ, เปเบเบเบงเบฒเบกเปเบเบฑเบเบเบดเบเบกเบฑเบเปเบเบตเบเบเบฐเบเบนเปเบเบทเปเบญเบเบดเบเบเบปเบงเปเบญเบเบเปเบงเบเบเบทเบเบเบดเบ, เปเบเปเบเบฒเบเบเบฑเปเบ, เปเบเบเปเบฅเบฐเบเบตเบเบตเปเบซเบฒเบเบฒเบ, เบกเบฑเบเบญเบฒเบเบเบฐเปเบเบฑเบเบงเบดเบเบตเบเบฝเบงเบเบตเปเบเบฐเปเบเปเปเบเบเบฑเบเบซเบฒเบเบตเปเบเปเปเปเบเปเบฎเบฑเบเบเบฒเบเปเบเปเปเบเปเบเบฅเบฐเบเบฑเบเบเบฐเบเบธเบเบฑเบ. .
เปเบเบเปเบเบทเปเบญเบเบกเบท, เบเปเบฒเบเบฐเปเบเบปเปเบฒเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเบเบฑเบเบชเบญเบเบเบฒเบเปเบเปเบเบญเบเบเบฒเบเบเบฝเบเปเบเบฅเปเบเบฅเบกเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ (APIs) เบเบตเปเบชเบฐเบซเบเบญเบเปเบซเปเปเบเบเบเบญเบเปเบฅเบฐเปเบเบเปเบเบเบเบฒเบเบชเปเบงเบเบเบตเบชเบฒเบก, เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบเบเบฒเบเปเบเปเปเบเบเบญเบเปเบงเบเบฑเบเบซเบกเบปเบเบเบตเปเปเบฎเบฑเบเปเบซเปเบเบฒเบเบเบปเปเบเบซเบฒเบเปเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฑเบเบซเบฒเปเบเปเบเบตเปเบเปเบฝเบงเบเปเบญเบเบเบฑเบเบฅเบฐเบซเบฑเบเบซเบผเบฒเบเบเบฐเบเบนเป.
เบเบณเบฅเบฑเบเปเบฅเบตเปเบกเบซเบปเบงเบเปเป
เบซเปเบญเบเบฎเบฝเบ Thread เปเบเบฑเบเบซเปเบญเบเบฎเบฝเบเบเบทเปเบเบเบฒเบเบเบตเปเบชเบธเบเปเบ .NET เบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบฐเบเบนเป. เบเบนเปเบเปเปเบชเปเบฒเบเบเบญเบกเบฎเบฑเบเบซเบเบถเปเบเปเบเบชเบญเบเบเบปเบงเปเบเบ:
- ThreadStart โ เบเปเปโเบกเบตโเบเบปเบงโเบเปเบฒโเบเบปเบโเบเบฒเบโ
- ParameterizedThreadStart - เบกเบตเบซเบเบถเปเบเบเบฒเบฅเบฒเบกเบดเปเบเบตเบเบญเบเบงเบฑเบเบเบธเบเบฐเปเบเบ.
เบเบปเบงเปเบเบเบเบฐเบเบทเบเบเบฐเบเบดเบเบฑเบเปเบเบเบฐเบเบนเปเบเบตเปเบชเปเบฒเบเบเบถเปเบเปเบซเบกเปเบซเบผเบฑเบเบเบฒเบเปเบเบซเบฒเบงเบดเบเบตเบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบ เบเปเบฒเบเบปเบงเปเบเบเบเบญเบเบเบฐเปเบเบ ParametrizedThreadStart เบเบทเบเบชเบปเปเบเบเบฑเบเบเบนเปเบเปเปเบชเปเบฒเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบงเบฑเบเบเบธเบเปเบญเบเบเบทเบเบชเบปเปเบเบเบฑเบเบงเบดเบเบตเบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบ. เบเบปเบเปเบเบเบตเปเปเบกเปเบเบเปเบฒเปเบเบฑเบเปเบเบทเปเบญเปเบญเบเบเปเปเบกเบนเบเบเปเบญเบเบเบดเปเบเปเบเปเปเบเบชเบนเปเบเบฐเปเบช. เบกเบฑเบเปเบเบฑเบเบกเบนเบเบเปเบฒเบเบตเปเบชเบฑเบเปเบเบเบงเปเบฒเบเบฒเบเบชเปเบฒเบ thread เปเบกเปเบเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบฅเบฒเบเบฒเปเบเบ, เปเบฅเบฐ thread เบเบปเบงเบเบญเบเบกเบฑเบเปเบญเบเปเบเบฑเบเบงเบฑเบเบเบธเบเบตเปเบซเบเบฑเบเปเบซเบเปเบ, เบขเปเบฒเบเบซเบเปเบญเบเปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบกเบฑเบเบเบฑเบเบชเบฑเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ 1MB เปเบ stack เปเบฅเบฐเบฎเบฝเบเบฎเปเบญเบเปเบซเปเบกเบตเบเบฒเบเปเบเปเบเบญเบเบเบฑเบ OS API.
new Thread(...).Start(...);
เบซเปเบญเบเบฎเบฝเบ ThreadPool เปเบเบฑเบเบเบปเบงเปเบเบเปเบเบงเบเบงเบฒเบกเบเบดเบเบเบญเบเบชเบฐเบเบธเบเปเบเบต. เปเบ .NET, thread pool เปเบกเปเบเบเบดเปเบเบชเปเบงเบเบเบญเบเบงเบดเบชเบฐเบงเบฐเบเปเบฒ, เปเบฅเบฐเบเบฑเบเบเบฑเบเบเบฐเบเบฒเบเบญเบ Microsoft เปเบเปเบเบฐเบเบฒเบเบฒเบกเบซเบผเบฒเบเปเบเบทเปเบญเปเบฎเบฑเบเปเบซเปเปเบเปเปเบเบงเปเบฒเบกเบฑเบเปเบฎเบฑเบเบงเบฝเบเปเบเปเบเบตเบเบตเปเบชเบธเบเปเบเบซเบผเบฒเบเปเบชเบฐเบเบฒเบเบฐเบเบฒเบ.
เปเบเบงเบเบงเบฒเบกเบเบดเบเบเบปเปเบงเปเบ:
เบเบฒเบเปเบงเบฅเบฒเบเบตเปเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบฅเบตเปเบกเบเบปเปเบ, เบกเบฑเบเบชเปเบฒเบเบซเบผเบฒเบเบซเบปเบงเบเปเปเปเบเบชเบฐเบซเบเบงเบเปเบเบเบทเปเบเบซเบฅเบฑเบเปเบฅเบฐเบชเบฐเบซเบเบญเบเบเบงเบฒเบกเบชเบฒเบกเบฒเบเปเบเบเบฒเบเปเบญเบปเบฒเบเบงเบเบกเบฑเบเปเบเปเบเป. เบเปเบฒเบเบฐเบเบนเปเบเบทเบเปเบเปเปเบฅเบทเปเบญเบเปเปเบฅเบฐเปเบเบฑเบเบเปเบฒเบเบงเบเบซเบผเบงเบเบซเบผเบฒเบ, เบชเบฐเบเบธเบเปเบเบตเบเบฐเบซเบเบฒเบเบญเบญเบเปเบเบทเปเบญเบเบญเบเบชเบฐเบซเบเบญเบเบเบงเบฒเบกเบเปเบญเบเบเบฒเบเบเบญเบเบเบนเปเปเบ. เปเบกเบทเปเบญเบเปเปเบกเบตเบเบฐเบเบนเปเบเบฃเบตเบขเบนเปเปเบเบชเบฐเบเบธเบเปเบเบตเปเบเปเบงเบฅเบฒเบเบตเปเปเบซเบกเบฒเบฐเบชเบปเบก, เบกเบฑเบเบเบฐเบฅเปเบเปเบฒเบซเบเบถเปเบเบเบญเบเบเบฐเบเบนเปเบเบฑเบเบเบทเบเบกเบฒ, เบซเบผเบทเบชเปเบฒเบเปเบซเบกเป. เบกเบฑเบเบเบฐเบเบดเบเบฑเบเบเบฒเบกเบงเปเบฒเบชเบฐเบเบธเบเปเบเบตเบเบฐเบเบนเปเปเบกเปเบเบเบตเปเบฅเบตเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเปเบฅเบเบฐเบชเบฑเปเบเปเบฅเบฐเบเปเปเบเบตเบเปเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบตเปเบเปเบฒเปเบเบตเบเบเบฒเบเปเบเบฑเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบฐเบซเบผเบญเบเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบฑเบเบซเบกเบปเบเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ.
เปเบเบทเปเบญเปเบเปเบเบฐเบเบนเปเบเบฒเบเบชเบฐเบเบธเบเปเบเบต, เบกเบตเบงเบดเบเบตเบเบฒเบ QueueUserWorkItem เบเบตเปเบเบญเบกเบฎเบฑเบเบเบปเบงเปเบเบเบเบญเบเบเบฐเปเบเบ WaitCallback, เปเบเบดเปเบเบกเบตเบฅเบฒเบเปเบเบฑเบเบเบฝเบงเบเบฑเบเบเบฑเบ ParametrizedThreadStart, เปเบฅเบฐเบเบฒเบฅเบฒเบกเบดเปเบเบตเบเบตเปเบชเบปเปเบเบเบฑเบเบกเบฑเบเบเบฐเบเบดเบเบฑเบเบซเบเปเบฒเบเบฝเบงเบเบฑเบ.
ThreadPool.QueueUserWorkItem(...);
เบงเบดเบเบตเบเบฒเบเบชเบฐเบเบธเบเปเบเบตเบเบฐเบเบนเปเบเบตเปเบฎเบนเปเบเบฑเบเบซเบเปเบญเบ RegisterWaitForSingleObject เบเบทเบเปเบเปเปเบเบทเปเบญเบเบฑเบเบฅเบฐเบเบฝเบเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบ IO เบเบตเปเบเปเปเบเบทเบเบเบฅเบฑเบญเบ. เบเบปเบงเปเบเบเบเบตเปเบเปเบฒเบเปเบเบซเบฒเบงเบดเบเบตเบเบฒเบเบเบตเปเบเบฐเบเบทเบเปเบญเบตเปเบเปเบกเบทเปเบญ WaitHandle เบเปเบฒเบเปเบเบซเบฒเบงเบดเบเบตเบเบฒเบเปเบกเปเบ "เบเปเบญเบเบญเบญเบเบกเบฒ".
ThreadPool.RegisterWaitForSingleObject(...)
.NET เบกเบตเบเบปเบงเบเบฑเบเปเบงเบฅเบฒเบเบฐเบเบนเป เปเบฅเบฐเบกเบฑเบเปเบเบเบเปเบฒเบเบเบฒเบเบเบปเบงเบเบฑเบเปเบงเบฅเบฒ WinForms/WPF เบเบตเปเบเบปเบงเบเบฑเบเบเบญเบเบกเบฑเบเบเบฐเบเบทเบเปเบญเบตเปเบเปเบชเปเบเบฐเบเบนเปเบเบตเปเปเบญเบปเบฒเบกเบฒเบเบฒเบเบชเบฐเบเบธเบเปเบเบต.
System.Threading.Timer
เบเบฑเบเบกเบตเบงเบดเบเบตเบเบตเปเปเบเบเบเบฐเบซเบผเบฒเบเบซเบผเบฒเบเบเบตเปเบเบฐเบชเบปเปเบเบเบนเปเปเบเบเปเบเบทเปเบญเบเบฐเบเบดเบเบฑเบเบเบฑเบเบเบฐเบเบนเปเบเบฒเบเบชเบฐเบเบธเบเปเบเบต - เบงเบดเบเบตเบเบฒเบ BeginInvoke.
DelegateInstance.BeginInvoke
เบเปเบฒเบเบฐเปเบเบปเปเบฒเบขเบฒเบเบเบฐเบขเบนเปเปเบเบเบซเบเปเปเบเปเบฝเบงเบเบฑเบเบเบฑเบเบเบฑเบเบเบตเปเบซเบผเบฒเบเบงเบดเบเบตเบเปเบฒเบเปเบเบดเบเบชเบฒเบกเบฒเบเปเบญเบตเปเบเบงเปเบฒ - CreateThread เบเบฒเบ Kernel32.dll Win32 API. เบกเบตเบงเบดเบเบตเบเบฒเบ, เบเปเบเบญเบเปเบเบเบฑเบเบเบปเบเปเบเบเบญเบเบงเบดเบเบตเบเบฒเบ extern, เปเบเบซเบฒเบซเบเปเบฒเบเบตเปเบเบตเป. เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเปเบซเบฑเบเบเบฒเบเปเบเบเบฑเปเบเบเปเบฒเบงเบเบฝเบเปเบเปเบเบฑเปเบเบเบฝเบงเปเบเบเบปเบงเบขเปเบฒเบเบเบตเปเบเบตเปเบฎเปเบฒเบเบเบญเบเบฅเบฐเบซเบฑเบเบกเปเบฅเบฐเบเบปเบ, เปเบฅเบฐเปเบฎเบเบเบนเบเปเบเบเบญเบเบเบนเปเบเบฝเบเบเบตเปเปเบฎเบฑเบเปเบเบเบเบตเปเบเบฑเบเบเบปเบเปเบเบฑเบเบเบงเบฒเบกเบฅเบถเบเบฅเบฑเบเบชเปเบฒเบฅเบฑเบเบเปเบญเบ.
Kernel32.dll CreateThread
เบเบฒเบเปเบเบดเปเบเปเบฅเบฐเบเบฒเบเปเบเปเบเบฑเบเบซเบฒเบเบฐเบเบนเป
เบเบฐเบเบนเปเบเบตเปเบชเปเบฒเบเปเบเบเบเปเบฒเบ, เบญเบปเบเบเบฐเบเบญเบเบเบฒเบเบชเปเบงเบเบเบตเบชเบฒเบกเบเบฑเบเบซเบกเบปเบ, เปเบฅเบฐ .NET pool เบชเบฒเบกเบฒเบเปเบเบดเปเบเปเบเปเบขเบนเปเปเบเบเปเบญเบเบขเปเบฝเบก Threads เบเบญเบ Visual Studio. เบเปเบญเบโเบขเปเบฝเบกโเบเบตเปโเบเบฐโเบชเบฐโเปเบเบโเบเปเปโเบกเบนเบโเบเปเบฒเบงโเบชเบฒเบโเบเบฝเบโเปเบเปโเปเบโเปเบงโเบฅเบฒโเบเบตเปโเบเปเบฒโเบฎเปเบญเบโเบชเบฐโเบซเบกเบฑเบโเปเบกเปเบโเบขเบนเปโเปเบโเบเบฒเบโเปเบเปโเปเบโเบเบฑเบโเบซเบฒโเปเบฅเบฐโเปเบโเบฎเบนเบโเปเบเบ Break . เบเบตเปเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบดเปเบเบเบทเป stack เปเบฅเบฐเบเบนเบฅเบดเบกเบฐเบชเบดเบเบเบญเบเปเบเปเบฅเบฐ thread เปเบเปเบชเบฐเบเบงเบ, เปเบฅเบฐเบชเบฐเบซเบผเบฑเบ debugging เบเบฑเบเบซเบปเบงเบเปเปเบชเบฐเปเบเบฒเบฐเปเบเบซเบเบถเปเบ. เบเบฒเบเบเปเบฒเปเบเปเบเบธเบเบชเบปเบกเบเบฑเบเบเบนเบฅเบดเบกเบฐเบชเบดเบเบเบญเบเบเบฑเปเบ Thread, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเบเบปเบเบเบงเบฒเบกเบชเปเบฒเบเบฑเบเบเบญเบ thread, เปเบเบดเปเบ OC เปเบฅเบฐ CLR เบเบฐเบฎเบฑเบเบฎเบนเปเบงเปเบฒเปเบเบฑเบเบเปเบฒเปเบเบฐเบเปเบฒเปเบเปเบงเบฅเบฒเบเบตเปเปเบเปเบเปเบงเบฅเบฒเบเบญเบเปเบเปเบเบเปเบเบตเบฅเบฐเบซเบงเปเบฒเบเบเบฐเบเบนเป.
Task Parallel Library
Task Parallel Library (TPL) เบเบทเบเบเปเบฒเบชเบฐเปเบซเบเบตเปเบ .NET 4.0. เปเบเบเบฑเบเบเบธเบเบฑเบเบกเบฑเบเปเบเบฑเบเบกเบฒเบเบเบฐเบเบฒเบเปเบฅเบฐเปเบเบทเปเบญเบเบกเบทเบเบปเปเบเบเปเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบ asynchrony. เบฅเบฐเบซเบฑเบเปเบเปเบเบตเปเบเปเบฒเปเบเปเบงเบดเบเบตเบเบฒเบเปเบเบปเปเบฒเปเบเปเปเบกเปเบเบเบทเบงเปเบฒเปเบเบฑเบเบกเปเบฅเบฐเบเบปเบ. เบซเบปเบงเปเปเบงเบเบเบทเปเบเบเบฒเบเบเบญเบ TPL เปเบกเปเบเบซเปเบญเบเบฎเบฝเบ Task เบเบฒเบ System.Threading.Tasks namespace. เบงเบฝเบเบเบฒเบเปเบกเปเบเปเบเบฑเบเบชเบดเปเบเบซเบเปเปเบเปเปเปเบเปเบฅเบเบฐเบเบฐเบเบนเป. เบเปเบงเบเบเบฒเบชเบฒ C# เบชเบฐเบเบฑเบเปเปเป, เบเบงเบเปเบฎเบปเบฒเบกเบตเบงเบดเบเบตเบเบตเปเบชเบฐเบซเบเปเบฒเบเบฒเบกเปเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบ Tasks - async/await operators . เปเบเบงเบเบงเบฒเบกเบเบดเบเปเบซเบผเบปเปเบฒเบเบตเปเปเบฎเบฑเบเปเบซเปเบกเบฑเบเปเบเบฑเบเปเบเปเบเปเบเบตเปเบเบฐเบเบฝเบเบฅเบฐเบซเบฑเบ asynchronous เบเบทเบเบฑเบเบงเปเบฒเบกเบฑเบเบเปเบฒเบเบเบฒเบเปเบฅเบฐ synchronous, เบเบตเปเปเบฎเบฑเบเปเบซเปเบกเบฑเบเปเบเบฑเบเปเบเปเบเปเปเบเบดเบเปเบกเปเบเบงเปเบฒเบชเปเบฒเบฅเบฑเบเบเบปเบเบเบตเปเบกเบตเบเบงเบฒเบกเปเบเบปเปเบฒเปเบเบซเบเปเบญเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฒเบเปเบเบเบญเบเบเบฐเบเบนเปเบเบตเปเบเบฐเบเบฝเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบตเปเบเปเบฒเปเบเปเบเบงเบเบกเบฑเบ, เบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบตเปเบเปเปเปเบเปเปเบเปเบเปเบเปเบงเบฅเบฒเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบฒเบง. เบเบฒเบเบเปเบฒเปเบเป async / await เปเบกเปเบเบซเบปเบงเบเปเปเบซเบเบถเปเบเบซเบผเบทเปเบกเปเบเบฐเบเบฑเปเบเบซเบผเบฒเบเบเบปเบเบเบงเบฒเบก, เปเบเปเบเปเบญเบเบเบฐเบเบฐเบเบฒเบเบฒเบกเปเบญเบปเบฒเบเบงเบฒเบกเบชเปเบฒเบเบฑเบเบเบญเบเบกเบฑเบเบขเบนเปเปเบเบชเบญเบเบชเบฒเบกเบเบฐเปเบซเบเบ:
- async เปเบกเปเบเบเบปเบงเปเบเปเปเบเบงเบดเบเบตเบเบฒเบเบชเบปเปเบเบเบทเบ Task เบซเบผเบท void
- เปเบฅเบฐเบฅเปเบเปเบฒเปเบกเปเบเบเบปเบงเบเบฐเบเบดเบเบฑเบเบเบฒเบเบฅเปเบเปเบฒ Task เบเบตเปเบเปเปเบเบดเบเบเบฑเปเบ.
เบญเบตเบเปเบเบทเปเบญ เปเบถเปเบ: เบเบนเปเบเบฐเบเบดเบเบฑเบเบเบฒเบเบฅเปเบเปเบฒ, เปเบเบเปเบฅเบฐเบเบตเบเบปเปเบงเปเบ (เบกเบตเบเปเปเบเบปเบเปเบงเบฑเปเบ), เบเบฐเบเปเบญเบเบเบฐเบเบนเปเบเบฐเบเบธเบเบฑเบเบเบญเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบทเปเบกเบญเบตเบ, เปเบฅเบฐเปเบกเบทเปเบญ Task เบชเปเบฒเปเบฅเบฑเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ, เปเบฅเบฐเบเบฐเบเบนเป (เปเบเบเบงเบฒเบกเปเบเบฑเบเบเบดเบ, เบกเบฑเบเบเบฐเบเบทเบเบเปเบญเบเบเบงเปเบฒเบเบตเปเบเบฐเปเบงเบปเปเบฒเบชเบฐเบเบฒเบเบเบฒเบ. , เปเบเปเปเบเบตเปเบกเปเบเบตเบกเบเปเบฝเบงเบเบฑเบเบงเปเบฒเบเปเปเบกเบฒ) เบเบฐเบชเบทเบเบเปเปเบเบฐเบเบดเบเบฑเบเบงเบดเบเบตเบเบฒเบเบเบทเปเบกเบญเบตเบ. เบเบฒเบเปเบ .NET, เบเบปเบเปเบเบเบตเปเบเบทเบเบเบฐเบเบดเบเบฑเบเปเบเบฅเบฑเบเบชเบฐเบเบฐเบเบฝเบงเบเบฑเบเบเบฑเบเบเบปเบเบเบญเบเปเบเบเบเบญเบเบเบปเบเบเบฐเบฅเบดเบ, เปเบกเบทเปเบญเบงเบดเบเบตเบเบฒเบเบเบฝเบเบเปเบฝเบเปเบเบฑเบเบเบฑเปเบเบเบฑเบเบซเบกเบปเบ, เปเบเบดเปเบเปเบเบฑเบเปเบเบทเปเบญเบเบเบฑเบเบเบญเบเบฅเบฑเบเปเบฅเบฐเบชเบฒเบกเบฒเบเบเบฐเบเบดเบเบฑเบเปเบเปเปเบเบเปเบญเบเปเบเบเบเปเบฒเบเบซเบฒเบเบเบถเปเบเบขเบนเปเบเบฑเบเบฅเบฑเบเปเบซเบผเบปเปเบฒเบเบตเป. เปเบเบเปเปเบเบฒเบกเบเบตเปเบชเบปเบเปเบเบชเบฒเบกเบฒเบเบเบฝเบเบฅเบฐเบซเบฑเบเบเปเบฒเบเปเปเบเบเปเบเป asynั / เบฅเปเบเปเบฒ, เบฅเบงเบเบฅเบงเบกเปเบฅเบฐเปเบเบดเปเบเบเบฒเบเบเบฐเบเบญเบเปเบเบเปเบเป JetBrains dotPeek เบเบฑเบ Compiler Generated Code เปเบเบตเบเปเบเป.
เปเบซเปเปเบเบดเปเบเบเบฒเบเปเบฅเบทเบญเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบตเบเบเบปเบงเปเบฅเบฐเบเบฒเบเบเปเบฒเปเบเป Task. เปเบเบเบปเบงเบขเปเบฒเบเบฅเบฐเบซเบฑเบเบเปเบฒเบเบฅเบธเปเบกเบเบตเป, เบเบงเบเปเบฎเบปเบฒเบชเปเบฒเบเบงเบฝเบเบเบฒเบเปเบซเบกเปเบเบตเปเบเปเปเบกเบตเบเบฐเปเบซเบเบ (เบเบฐเบเบนเป.เบเบญเบ (10000)), เปเบเปเปเบเบเบตเบงเบดเบเบเบดเบเบเบตเปเบเบงเบเบเบฐเปเบเบฑเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบตเปเบเบฑเบเบเปเบญเบ CPU เบซเบผเบฒเบ.
using TCO = System.Threading.Tasks.TaskCreationOptions;
public static async void VoidAsyncMethod() {
var cancellationSource = new CancellationTokenSource();
await Task.Factory.StartNew(
// Code of action will be executed on other context
() => Thread.Sleep(10000),
cancellationSource.Token,
TCO.LongRunning | TCO.AttachedToParent | TCO.PreferFairness,
scheduler
);
// Code after await will be executed on captured context
}
A Task เบเบทเบโเบชเปเบฒเบโเบเบถเปเบโเปเบเบโเบกเบตโเบเปเบฒโเบเบงเบโเบเบญเบโเบเบฒเบโเปเบฅเบทเบญเบโ:
- LongRunning เปเบกเปเบเบเปเบฒเปเบเบฐเบเปเบฒเบงเปเบฒเบงเบฝเบเบเบฒเบเบเบฐเบเปเปเบชเปเบฒเปเบฅเบฑเบเบขเปเบฒเบเปเบงเบงเบฒ, เบเบถเปเบเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเบกเบฑเบเบญเบฒเบเบเบฐเบเบธเปเบกเบเปเบฒเบเบตเปเบเบฐเบเปเปเปเบญเบปเบฒเบเบฐเบเบนเปเบญเบญเบเบเบฒเบเบชเบฐเบเบธเบเปเบเบต, เปเบเปเบชเปเบฒเบเปเบเบเบเปเบฒเบเบซเบฒเบเบชเปเบฒเบฅเบฑเบเบงเบฝเบเบเบฒเบเบเบตเปเปเบเบทเปเบญเบเปเปเปเบเบฑเบเบญเบฑเบเบเบฐเบฅเบฒเบเบเปเปเบเบปเบเบญเบทเปเบ.
- AttachedToParent - เบงเบฝเบเบเบฒเบเบชเบฒเบกเบฒเบเบเบฑเบเบฅเบฝเบเบเบฒเบกเบฅเบณเบเบฑเบ. เบเปเบฒเบเบฒเบเปเบฅเบทเบญเบเบเบตเปเบเบทเบเบเปเบฒเปเบเป, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ Task เบญเบฒเบเบเบฐเบขเบนเปเปเบเบชเบฐเบเบฒเบเบฐเบเบตเปเบกเบฑเบเปเบญเบเปเบเปเบชเปเบฒเปเบฅเบฑเบเปเบฅเบฐเบฅเปเบเปเบฒเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบญเบเบฅเบนเบเบเบญเบเบกเบฑเบ.
- PreferFairness - เบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเบกเบฑเบเบเบฐเบเบตเบเบงเปเบฒเบเบตเปเบเบฐเบเบฐเบเบดเบเบฑเบเบซเบเปเบฒเบงเบฝเบเบเบตเปเบชเบปเปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเปเบญเบเบซเบเปเบฒเบเบฑเปเบเบเปเบญเบเบเบตเปเบเบฐเบชเบปเปเบเบเปเปเบกเบฒ. เปเบเปเบเบตเปเปเบกเปเบเบเบฝเบเปเบเปเบเปเบฒเปเบเบฐเบเปเบฒเปเบฅเบฐเบเบปเบเปเบเปเบฎเบฑเบเบเปเปเปเบเปเบฎเบฑเบเบเบฐเบเบฑเบ.
เบเบฒเบฅเบฒเบกเบดเปเบเบตเบเบตเบชเบญเบเบเบตเปเบเปเบฒเบเปเบเบซเบฒเบงเบดเบเบตเบเบฒเบเปเบกเปเบ CancellationToken. เปเบเบทเปเบญเบเบฑเบเบเบฒเบเบเบฒเบเบเบปเบเปเบฅเบตเบเบเบฒเบเบเบณเปเบเบตเบเบเบฒเบเบขเปเบฒเบเบเบทเบเบเปเบญเบเบซเบผเบฑเบเบเบฒเบเบเบตเปเบกเบฑเบเปเบฅเบตเปเบกเบเบปเปเบเปเบฅเปเบง, เบฅเบฐเบซเบฑเบเบเบตเปเบเบทเบเบเบฐเบเบดเบเบฑเบเบเบฐเบเปเบญเบเปเบเบฑเบกเปเบเบเปเบงเบเบเบฒเบเบเบงเบเบชเบญเบเบชเบฐเบเบฒเบเบฐ CancellationToken. เบเปเบฒเบเปเปเบกเบตเบเบฒเบเบเบงเบเบชเบญเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบงเบดเบเบตเบเบฒเบเบเบปเบเปเบฅเบตเบเบเบตเปเปเบญเบตเปเบเบขเบนเปเปเบเบงเบฑเบเบเบธ CancellationTokenSource เบเบฐเบชเบฒเบกเบฒเบเบขเบธเบเปเบเบปเบฒเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบญเบ Task เบเบฝเบเปเบเปเบเปเบญเบเบเบตเปเบกเบฑเบเบเบฐเปเบฅเบตเปเบกเบเบปเปเบ.
เบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเบชเบธเบเบเปเบฒเบเปเบกเปเบเบงเบฑเบเบเบธเบเปเบฒเบเบปเบเปเบงเบฅเบฒเบเบญเบเบเบฐเปเบเบเบเบญเบ TaskScheduler. เบเบฑเปเบเบฎเบฝเบเบเบตเปเปเบฅเบฐเบฅเบนเบเบซเบฅเบฒเบเบเบญเบเบกเบฑเบเบเบทเบเบญเบญเบเปเบเบเปเบเบทเปเบญเบเบงเบเบเบธเบกเบเบธเบเบเบฐเบชเบฒเบเบเบฒเบเปเบเบเบขเบฒเบ Tasks เปเบเบเบปเปเบงเบซเบปเบงเบเปเปเปเบเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบ, Task เบเบฐเบเบทเบเบเบฐเบเบดเบเบฑเบเบขเบนเปเปเบเบซเบปเบงเบเปเปเปเบเบเบชเบธเปเบกเบเบฒเบเบชเบฐเบเบธเบเปเบเบต.
เบเบปเบงเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบตเปเบฅเปเบเปเบฒเปเบกเปเบเบเบทเบเบเปเบฒเปเบเปเบเบฑเบ Task เบเบตเปเบเบทเบเบชเปเบฒเบเบเบทเปเบ, เบเบถเปเบเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเบฅเบฐเบซเบฑเบเบเบตเปเบเบฝเบเบซเบผเบฑเบเบเบฒเบเบกเบฑเบ, เบเปเบฒเบกเบตเบซเบเบถเปเบ, เบเบฐเบเบทเบเบเบฐเบเบดเบเบฑเบเปเบเบชเบฐเบเบฒเบเบเบฒเบเบเบฝเบงเบเบฑเบ (เบกเบฑเบเบเบฐเบซเบกเบฒเบเปเบเบดเบเบซเบปเบงเบเปเปเบเบฝเบงเบเบฑเบ) เปเบเบฑเบเบฅเบฐเบซเบฑเบเบเปเบญเบเบเบตเปเบเบฐเบฅเปเบเปเบฒ.
เบงเบดเบเบตเบเบฒเบเบเบทเบเบซเบกเบฒเบเปเบเบฑเบ async void, เบเบถเปเบเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเบกเบฑเบเบชเบฒเบกเบฒเบเบเปเบฒเปเบเปเบเบปเบงเบเบฐเบเบดเบเบฑเบเบเบฒเบเบฅเปเบเปเบฒ, เปเบเปเบฅเบฐเบซเบฑเบเบเบฒเบเปเบเบเบฐเบเปเปเบชเบฒเบกเบฒเบเบฅเปเบเปเบฒเบเบฒเบเบเบฐเบเบดเบเบฑเบเปเบเป. เบเปเบฒเบเบธเบเบชเบปเบกเบเบฑเบเบเบฑเปเบเบเปเบฒเบงเบกเบตเบเบงเบฒเบกเบเปเบฒเปเบเบฑเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบงเบดเบเบตเบเบฒเบเบเปเบญเบเบเบฑเบเบเบทเบ Task. เบงเบดเบเบตเบเบฒเบเบซเบกเบฒเบ async void เปเบกเปเบเบเปเบญเบเบเปเบฒเบเบเบปเปเบงเปเบ: เบเบฒเบกเบเบปเบเบฅเบฐเบเบฝเบ, เปเบซเบผเบปเปเบฒเบเบตเปเปเบกเปเบเบเบปเบงเบเบฑเบเบเบฒเบเปเบซเบเบเบฒเบเบซเบผเบทเบงเบดเบเบตเบเบฒเบเบญเบทเปเบเปเบเบตเปเปเบฎเบฑเบเบงเบฝเบเบเปเบฝเบงเบเบฑเบเปเบเปเบฅเบฐเบฅเบทเบกเบซเบผเบฑเบเบเบฒเบ. เบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเบเปเปเบเบฝเบเปเบเปเปเบซเปเปเบญเบเบฒเบเบเบตเปเบเบฐเบฅเปเบเปเบฒเบเบปเบเบเปเบงเบฒเบชเบดเปเบเบชเบธเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ, เปเบเปเบเบฑเบเบชเบปเปเบเบเบปเบเปเบเปเบฎเบฑเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเป Task.
เปเบเบงเบฝเบเบเบฒเบเบเบตเปเบงเบดเบเบตเบเบฒเบ StartNew เบเบฑเบเบเบทเบเบกเบฒ, เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบเบงเบดเบเบตเบเบฒเบเบญเบทเปเบเป, เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบซเบฒเบงเบดเบเบตเบเบฒเบ ConfigureAwait เบเปเบงเบเบเบฒเบฅเบฒเบกเบดเปเบเบตเบเบตเปเบเปเปเบเบทเบเบเปเบญเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบฒเบเบเบฐเบเบดเบเบฑเบเบซเบผเบฑเบเบเบฒเบเบเบฒเบเบฅเปเบเปเบฒเบเบฐเบชเบทเบเบเปเปเบเปเปเปเบเปเบขเบนเปเปเบเบชเบฐเบเบฒเบเบเบฒเบเบเบตเปเบเบทเบเบเบฑเบ, เปเบเปเบขเบนเปเปเบเบเบปเบงเบเปเบฒเบเบปเบเปเบญเบ. เบเบตเปเบเบงเบเบเบฐเปเบฎเบฑเบเปเบเปเบเบฐเบซเบผเบญเบเปเบงเบฅเบฒเปเบกเบทเปเบญเบเปเบฅเบดเบเบปเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเปเปเบชเปเบฒเบเบฑเบเบชเปเบฒเบฅเบฑเบเบฅเบฐเบซเบฑเบเบซเบผเบฑเบเบเบฒเบเบฅเปเบเปเบฒ. เบเบตเปเบเบฑเบเปเบเบฑเบเบเปเบฒเปเบเบฐเบเปเบฒเบเบฒเบ MS เปเบเปเบงเบฅเบฒเบเบตเปเบเบฝเบเบฅเบฐเบซเบฑเบเบเบตเปเบเบฐเบเบทเบเบเบฑเบเบชเบปเปเบเปเบเบซเปเบญเบเบชเบฐเบซเบกเบธเบ.
เปเบซเปเปเบฎเบปเบฒเบขเบนเปเบเบทเปเบกเบญเบตเบเปเปเบญเบเปเบถเปเบเบเปเบฝเบงเบเบฑเบเบงเบดเบเบตเบเบตเปเปเบเบปเปเบฒเบชเบฒเบกเบฒเบเบฅเปเบเปเบฒเปเบซเปเบชเบณเปเบฅเบฑเบเปเปเบฒเบงเบฝเบเปเบเป. เบเปเบฒเบเบฅเบธเปเบกเบเบตเปเปเบกเปเบเบเบปเบงเบขเปเบฒเบเบเบญเบเบฅเบฐเบซเบฑเบ, เปเบเบเบกเบตเบเปเบฒเบเบดเบเบเปเบฒเปเบซเบฑเบเบเปเบฝเบงเบเบฑเบเปเบงเบฅเบฒเบเบตเปเบเบงเบฒเบกเบเบฒเบเบซเบงเบฑเบเปเบกเปเบเปเบฎเบฑเบเปเบเปเบเบตเบเบฒเบกเปเบเบทเปเบญเบเปเบเปเบฅเบฐเปเบกเบทเปเบญเบกเบฑเบเบเบทเบเบเบฐเบเบดเบเบฑเบเบเบตเปเบเปเปเบเบต.
public static async void AnotherMethod() {
int result = await AsyncMethod(); // good
result = AsyncMethod().Result; // bad
AsyncMethod().Wait(); // bad
IEnumerable<Task> tasks = new Task[] {
AsyncMethod(), OtherAsyncMethod()
};
await Task.WhenAll(tasks); // good
await Task.WhenAny(tasks); // good
Task.WaitAll(tasks.ToArray()); // bad
}
เปเบเบเบปเบงเบขเปเบฒเบเบเปเบฒเบญเบดเบ, เบเบงเบเปเบฎเบปเบฒเบฅเปเบเปเบฒ Task เบชเปเบฒเปเบฅเบฑเบเปเบเบเบเปเปเบกเบตเบเบฒเบเบชเบฐเบเบฑเบเบเบฐเบเบนเปเบเบฒเบเปเบ;
เปเบเบเบฒเบเปเบฅเบทเบญเบเบเบตเบชเบญเบ, เบเบงเบเปเบฎเบปเบฒเบเบฑเบเบเบฐเบเบนเปเบเบฒเบเปเบเบเบปเบเบเปเบงเบฒเบเบปเบเปเบเปเบฎเบฑเบเบเบญเบเบงเบดเบเบตเบเบฒเบเปเบเปเบเบทเบเบเบดเบเปเบฅเป. เบเบตเปเปเบกเปเบเบเปเปเบเบตเบเปเปเบเบฝเบเปเบเปเบเปเบญเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเปเบเปเบเบญเบเบเบญเบเบเบฐเบเบนเป, เบเบฑเบเบเบฐเบเบฒเบเบญเบเบญเบฑเบเบกเบตเบเปเบฒเบเบญเบเปเบเบฅเปเบเบฅเบก, เบกเบตเบเบงเบฒเบกเบเบฝเบเปเบเปเบฒเบเบเบฒเบ, เปเบเปเบเบฑเบเบเปเบญเบเบงเปเบฒเบเปเบฒเบฅเบฐเบซเบฑเบเบเบญเบเบงเบดเบเบตเบเบฒเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบญเบตเปเบเบงเปเบฒเบกเบตเบฅเปเบเปเบฒเบขเบนเป, เปเบฅเบฐเบชเบฐเบเบฒเบเบเบฒเบ synchronization เบฎเบฝเบเบฎเปเบญเบเปเบซเปเบเบฑเบเบเบทเบเปเบเบซเบฒเบซเบปเบงเบเปเปเปเบเบซเบฒเบเบฒเบเบซเบผเบฑเบ. เบฅเปเบเปเบฒ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเปเบฎเบฑเบเบเบฒเบ deadlock : เบเบฐเบเบนเปเบเบฒเบเปเบเบฅเปเบเปเบฒเปเบเบเบฐเบเบฐเบเบตเปเบเบปเบเปเบเปเบฎเบฑเบเบเบญเบเบงเบดเบเบตเบเบฒเบ asynchronous เปเบเปเบเบทเบเบเบดเบเปเบฅเป, เบงเบดเบเบตเบเบฒเบ asynchronous เบเบฐเบเบฒเบเบฒเบกเปเบ vain เบชเบทเบเบเปเปเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบญเบเบเบปเบเปเบเบเบฐเบเบนเปเบเบฒเบเปเบ.
เบเปเปเปเบชเบเบญเบตเบเบญเบฑเบเบซเบเบถเปเบเบเบญเบเบงเบดเบเบตเบเบฒเบเบเบตเปเปเบกเปเบเบเบฒเบเบเบฑเบเบเบฒเบเบเบงเบฒเบกเบเบดเบเบเบฒเบเบเบตเปเบชเบฑเบเบชเบปเบ. เบเบงเบฒเบกเบเบดเบเปเบกเปเบเบงเปเบฒเบเบงเบฒเบกเบเบดเบเบเบฒเบเปเบเบฅเบฐเบซเบฑเบ asynchronous เปเบกเบทเปเบญเปเบเป async/await เปเบกเปเบเบเปเบฒเบเบเปเปเบเบฒเบเบเบฑเบเบเบฒเบ - เบเบงเบเบกเบฑเบเบเบฐเบเบดเบเบฑเบเบเบทเบเบฑเบเบเบฑเบเบงเปเบฒเบฅเบฐเบซเบฑเบเบเบทเบ synchronous. เปเบเบเบฐเบเบฐเบเบตเปเบเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเปเบเบฒเบเบฅเปเบเปเบฒ synchronous exorcism เบเบฑเบ Task, เบเปเปเบเบปเบเปเบงเบฑเปเบเบเบปเปเบเบชเบฐเบเบฑเบเบเปเบฝเบเปเบเบฑเบ AggregateException, i.e. เปเบเบทเปเบญเบเบฑเบเบเบฒเบเบเบฑเบเบเปเปเบเบปเบเปเบงเบฑเปเบ, เบเปเบฒเบเบเบฐเบเปเบญเบเบเบงเบเปเบเบดเปเบเบเบฐเปเบเบ InnerException เปเบฅเบฐเบเบฝเบเบชเบฒเบเบเปเบญเบเปเบชเปเบเปเบฒเบเบปเบงเบเปเบฒเบเปเบญเบเบขเบนเปเปเบเบเบฑเบเบเบฑเบเบซเบเบถเปเบเบซเบผเบทเปเบเปเบเบฒเบเบเบฑเบเปเบเปเบงเบฅเบฒเบเบตเปเบเบฒเบเบเปเปเบชเปเบฒเบ, เปเบเบเบเบตเปเบเบฐเปเบเบฑเบเบเปเบญเบเปเบชเปเบเบญเบเบเบฑเบเบเบฑเบเบเบตเปเบเบธเปเบเปเบเบตเบเปเบเปเบฅเบ C #.
เบเบปเบงเบขเปเบฒเบเบเบตเบชเบฒเบกเปเบฅเบฐเบชเบธเบเบเปเบฒเบเปเบกเปเบเบเบฑเบเบเบทเบเบซเบกเบฒเบเบงเปเบฒเบเปเปเบเบตเบชเปเบฒเบฅเบฑเบเปเบซเบเบเบปเบเบเบฝเบงเบเบฑเบเปเบฅเบฐเบเบฐเบเบญเบเบเปเบงเบเบเบฑเบเบซเบฒเบเบฝเบงเบเบฑเบเบเบฑเบเบซเบกเบปเบ.
เบงเบดเบเบตเบเบฒเบ WhenAny เปเบฅเบฐ WhenAll เปเบกเปเบเบชเบฐเบเบงเบเบเบตเปเบชเบธเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบฅเปเบเปเบฒเบเบธเปเบก Tasks;
เบเบฒเบเบขเบธเบเปเบเบปเบฒเบเบฐเบเบนเป
เบชเปเบฒเบฅเบฑเบเปเบซเบเบเบปเบเบเปเบฒเบเป, เบกเบฑเบเบญเบฒเบเบเบฐเบเปเบฒเปเบเบฑเบเบเปเบญเบเบขเบธเบเปเบเบปเบฒเบเบฒเบเปเบซเบผเบซเบผเบฑเบเบเบฒเบเบเบตเปเบกเบฑเบเปเบเปเปเบฅเบตเปเบกเบเบปเปเบ. เบกเบตเบซเบผเบฒเบเบงเบดเบเบตเบเบตเปเบเบฐเปเบฎเบฑเบเปเบเบงเบเบตเป. เบซเปเบญเบเบฎเบฝเบเบเบฐเบเบนเปเบกเบตเบชเบญเบเบงเบดเบเบตเบเบฒเบเบเบตเปเบกเบตเบเบทเปเบเบตเปเปเบซเบกเบฒเบฐเบชเบปเบก: เปเบญเบปเบฒเบฅเบนเบเบญเบญเบ ะธ เบเบฑเบเบเบงเบฒเบ. เบญเบฑเบเบเปเบฒเบญเบดเบเปเบกเปเบเบเปเปเปเบเบฐเบเปเบฒเปเบซเปเปเบเป, เปเบเบฒเบฐเบงเปเบฒ เบซเบผเบฑเบเบเบฒเบเปเบเบซเบฒเบกเบฑเบเปเบเปเบงเบฅเบฒเบชเบธเปเบกเปเบเบเปเปเบเบฒเบก, เปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบเบธเบเปเบเปเบเบเปเบฒเปเบเบฐเบเปเบฒเปเบเป, เบเปเปเบเบปเบเปเบงเบฑเปเบเบเบฐเบเบทเบเบเบดเปเบก เบเบฐเบเบนเปAbortedException. เบเปเบฒเบเบเปเปเบเบฒเบเบซเบงเบฑเบเบงเปเบฒเบเบฒเบเบเบปเบเปเบงเบฑเปเบเบเบฑเปเบเบเปเบฒเบงเบเบฐเบเบทเบเบเบดเปเบกเปเบเปเบงเบฅเบฒเบเบตเปเปเบเบตเปเบกเบเบปเบงเปเบ integer, เปเบกเปเบเบเป? เปเบฅเบฐเปเบเปเบงเบฅเบฒเบเบตเปเปเบเปเบงเบดเบเบตเบเบฒเบเบเบตเป, เบเบตเปเปเบกเปเบเบชเบฐเบเบฒเบเบฐเบเบฒเบเบเบตเปเปเบเปเบเบดเบเบซเบผเบฒเบ. เบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเบเปเบญเบเบเบฑเบ CLR เบเบฒเบเบเบฒเบเบชเปเบฒเบเบเปเปเบเบปเบเปเบงเบฑเปเบเบเบฑเปเบเบเปเบฒเบงเปเบเบเบฒเบเบชเปเบงเบเบเบญเบเบฅเบฐเบซเบฑเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบซเปเปเบกเบฑเบเบขเบนเปเปเบเบเบฒเบเปเบ. Thread.BeginCriticalRegion, Thread.EndCriticalRegion. เบฅเบฐเบซเบฑเบเปเบเปเบเบตเปเบเบฝเบเบขเบนเปเปเบเบเบฅเบฑเบญเบเบชเบธเบเบเปเบฒเบเปเบกเปเบเบซเปเปเบขเบนเปเปเบเบเบฒเบเปเบเบเบฑเปเบเบเปเบฒเบง. เบชเปเบฒเบฅเบฑเบเปเบซเบเบเบปเบเบเบตเป, เปเบเบเบงเบฒเบกเปเบฅเบดเบเบเบญเบเบฅเบฐเบซเบฑเบเบเบญเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเบญเบเบซเบฒเบเบฑเบเบเปเบงเบเบเบฒเบเบเบฐเบเบฒเบเบฒเบกเบซเบงเปเบฒเบเปเบเบปเปเบฒ, เปเบเปเบชเบธเบเบเปเบฒเบเบเปเปเปเบกเปเบเบซเบงเปเบฒเบเปเบเบปเปเบฒ. Microsoft เบเบฑเบเบเบงเบฒเบเบงเบดเบเบตเบเบฒเบเบเบตเปเบซเบผเบฒเบเบเบตเปเบเบงเบเปเบเบปเบฒเบเปเปเปเบเปเบฅเบงเบกเปเบญเบปเบฒเบกเบฑเบเบขเบนเปเปเบ .net core.
เบงเบดเบเบตเบเบฒเบเบเบฑเบเบเบงเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบตเปเบเบฒเบเปเบเบปเบฒเปเบเปเบซเบผเบฒเบเบเบถเปเบ. เบกเบฑเบเบชเบฒเบกเบฒเบเบเบฑเบเบเบงเบฒเบเบเบฐเบเบนเปเปเบเบเบกเบตเบเปเปเบเบปเบเปเบงเบฑเปเบ ThreadInterruptedException เบเบฝเบเปเบเปเปเบเบเปเบงเบเปเบงเบฅเบฒเปเบซเบผเบปเปเบฒเบเบฑเปเบเปเบเปเบงเบฅเบฒเบเบตเปเบเบฐเบเบนเปเบขเบนเปเปเบเบชเบฐเบเบฒเบเบฐเบฅเปเบเปเบฒ. เบกเบฑเบเปเบเบปเปเบฒเบชเบนเปเบชเบฐเบเบฒเบเบฐเบเบตเปเปเบเบเบฐเบเบฐเบเบตเปเบซเปเบญเบเปเบเบเบฐเบเบฐเบเบตเปเบฅเปเบเปเบฒ WaitHandle, lock, เบซเบผเบทเบซเบผเบฑเบเบเบฒเบเปเบเบซเบฒ Thread.Sleep.
เบเบฑเบเบชเบญเบเบเบฒเบเปเบฅเบทเบญเบเบเบตเปเบญเบฐเบเบดเบเบฒเบเบเปเบฒเบเปเบเบดเบเปเบกเปเบเบเปเปเบเบตเปเบเบทเปเบญเบเบเบฒเบเบเบฒเบเบเบฒเบเปเบเบปเบฒเบเปเปเปเบเป. เบเบฒเบเปเบเปเปเบเปเบกเปเบเบเบฒเบเบเปเบฒเปเบเปเปเบเบเบชเปเบฒเบ CancellationToken เปเบฅเบฐเบซเปเบญเบเบฎเบฝเบ เปเบซเบผเปเบ CancellationToken. เบเบธเบเบเบตเปเปเบกเปเบ: เบเบปเบงเบขเปเบฒเบเบเบญเบเบเบฑเปเบ CancellationTokenSource เบเบทเบเบชเปเบฒเบเบเบทเปเบเปเบฅเบฐเบกเบตเบเบฝเบเปเบเปเบเบนเปเบเบตเปเปเบเบฑเบเปเบเบปเปเบฒเบเบญเบเบกเบฑเบเปเบเบปเปเบฒเบเบฑเปเบเบเบตเปเบชเบฒเบกเบฒเบเบขเบธเบเปเบเบปเบฒเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเปเบเบเบเบฒเบเปเบเบซเบฒเบงเบดเบเบตเบเบฒเบ. เบเบปเบเปเบฅเบตเบเบเบฒเบ. เบเบฝเบเปเบเป CancellationToken เบเบทเบเบชเบปเปเบเปเบเบซเบฒเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบญเบเบกเบฑเบเปเบญเบ. เปเบเบปเปเบฒเบเบญเบ CancellationToken เบเปเปเบชเบฒเบกเบฒเบเบเบปเบเปเบฅเบตเบเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเปเบงเบเบเบปเบเปเบญเบ, เปเบเปเบเบฝเบเปเบเปเบชเบฒเบกเบฒเบเบเบงเบเปเบเบดเปเบเบงเปเบฒเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเปเบเปเบเบทเบเบเบปเบเปเบฅเบตเบ. เบกเบตเบเบธเบเบชเบปเบกเบเบฑเบ Boolean เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบตเป เบฎเปเบญเบเบเปเบเบฒเบเบเบปเบเปเบฅเบตเบเปเบฅเปเบง เปเบฅเบฐเบงเบดเบเบตเบเบฒเบ เบฎเปเบญเบเบเปเบเบปเบเปเบฅเบตเบเปเบฅเปเบง. เบชเบธเบเบเปเบฒเบเบเบฐเบเบดเปเบกเบเปเปเบเบปเบเปเบงเบฑเปเบ TaskCelledException เบเปเบฒเบงเบดเบเบตเบเบฒเบเบเบปเบเปเบฅเบตเบเบเบทเบเปเบญเบตเปเบเบขเบนเปเปเบเบเบปเบงเบขเปเบฒเบ CancellationToken เบเบตเปเบเบทเบ parroted. เปเบฅเบฐเบเบตเปเปเบกเปเบเบงเบดเบเบตเบเบฒเบเบเบตเปเบเปเบญเบเปเบเบฐเบเปเบฒเปเบซเปเปเบเป. เบเบตเปโเปเบกเปเบโเบเบฒเบโเบเบฑเบโเบเบธเบโเบเบฒเบโเปเบฅเบทเบญเบโเบเบตเปโเบเปเบฒเบโเบกเบฒโเปเบเบโเบเบฒเบโเปเบเปโเบฎเบฑเบโเบเบฒเบโเบเบงเบโเบเบธเบกโเบขเปเบฒเบโเปเบเบฑเบกโเบเบตเปโเปเบโเบเบธเบโเปเบโเบเบตเปโเบเบฒเบโเบเบฐโเบเบดโเบเบฑเบโเบเบฒเบโเบเบปเบโเปเบฅเบตเบโเบชเบฒโเบกเบฒเบโเบเบปเบโเปเบฅเบตเบ.
เบเบฒเบเปเบฅเบทเบญเบเบเบตเปเปเบซเบเบฎเปเบฒเบเบเบตเปเบชเบธเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบขเบธเบเบเบฐเบเบนเปเปเบกเปเบเบเบฒเบเปเบเบซเบฒเบซเบเปเบฒเบเบตเป Win32 API TerminateThread. เบเบถเบเบเบดเบเปเบฒเบเบญเบ CLR เบซเบผเบฑเบเบเบฒเบเบเบฒเบเปเบญเบตเปเบเบเบฑเบเบเบฑเบเบเบตเปเบญเบฒเบเบเบฐเบเปเปเบชเบฒเบกเบฒเบเบเบฒเบเปเบเบปเบฒเปเบเป. เปเบ MSDN เบเปเปเปเบเบเบตเปเปเบกเปเบเบเบฝเบเบเปเบฝเบงเบเบฑเบเบซเบเปเบฒเบเบตเปเบเบตเป: "TerminateThread เปเบกเปเบเบซเบเปเบฒเบเบตเปเบญเบฑเบเบเบฐเบฅเบฒเบเบเบตเปเบเบงเบเบเบฐเบเบทเบเบเปเบฒเปเบเปเปเบเบเปเบฅเบฐเบเบตเบเบตเปเบฎเปเบฒเบเปเบฎเบเบเบตเปเบชเบธเบเปเบเบปเปเบฒเบเบฑเปเบ. โ
เบเบฒเบเบเปเบฝเบ API เปเบเบตเบกเปเบเบฑเบ Task Based เปเบเบเปเบเปเบงเบดเบเบต FromAsync
เบเปเบฒเบเปเบฒเบเปเบเบเบเบตเบเปเบเบตเปเบเบฐเปเบฎเบฑเบเบงเบฝเบเปเบเปเบเบเบเบฒเบเบเบตเปเปเบเปเปเบฅเบตเปเบกเบเบปเปเบเบซเบผเบฑเบเบเบฒเบ Tasks เบเบทเบเบเปเบฒเบชเบฐเปเบซเบเบตเปเบฅเบฐเบขเบธเบเปเบเบปเบฒเบเบตเปเบเบฐเปเบฎเบฑเบเปเบซเปเปเบเบตเบเบเบงเบฒเบกเบขเปเบฒเบเบเบตเปเบเบฝเบเบชเบฐเบซเบเบปเบเบชเปเบฒเบฅเบฑเบเบเบฑเบเบเบฑเบเบเบฐเบเบฒเบชเปเบงเบเปเบซเบเป, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบเบฐเบเปเปเบเปเบญเบเบเบฑเบเบเบฒเบเบเบฑเบ APIs เปเบเบปเปเบฒเบซเบผเบฒเบ, เบเบฑเบเบเบฒเบเบชเปเบงเบเบเบตเบชเบฒเบกเปเบฅเบฐเบเบตเบกเบเบฒเบเบเบญเบเบเปเบฒเบ. เปเบเปโเบเบทเบโเบเปโเบฅเบฐโเบกเบฒเบโเปเบโเบญเบฐโเบเบตเบโ. เปเบเบเบเบต, เบเบตเบกเบเบฒเบ .NET Framework เปเบเปเบเบนเปเบฅเบเบงเบเปเบฎเบปเบฒ, เปเบเบดเบเปเบกเปเบเบงเปเบฒเบเบฒเบเบเบตเปเบเบปเปเบฒเบซเบกเบฒเบเปเบกเปเบเปเบเบทเปเบญเบเบนเปเบฅเบเบปเบงเปเบญเบ. เบเปเบญเบเบงเปเบฒเบกเบฑเบเบญเบฒเบเบเบฐ, .NET เบกเบตเปเบเบทเปเบญเบเบกเบทเบเปเบฒเบเบงเบเบซเบเบถเปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบเบฅเบฐเบซเบฑเบเบเบตเปเบเปเปเปเบเบฑเบเบเบงเบเบเบตเปเบเบฝเบเปเบงเปเปเบเบงเบดเบเบตเบเบฒเบเบเบฒเบเบเบฝเบเปเบเบฅเปเบเบฅเบก asynchronous เปเบเบปเปเบฒเปเบเบซเบฒเปเบซเบกเป. เบซเบเบถเปเบเปเบเบเบฑเปเบเปเบกเปเบเบงเบดเบเบตเบเบฒเบ FromAsync เบเบญเบ TaskFactory. เปเบเบเบปเบงเบขเปเบฒเบเบฅเบฐเบซเบฑเบเบเปเบฒเบเบฅเบธเปเบกเบเบตเป, เบเปเบฒเบเบฐเปเบเบปเปเบฒเบซเปเปเบงเบดเบเบตเบเบฒเบ async เปเบเบปเปเบฒเบเบญเบเบซเปเบญเบเบฎเบฝเบ WebRequest เปเบ Task เปเบเบเปเบเปเบงเบดเบเบตเบเบตเป.
object state = null;
WebRequest wr = WebRequest.CreateHttp("http://github.com");
await Task.Factory.FromAsync(
wr.BeginGetResponse,
we.EndGetResponse
);
เบเบตเปเปเบกเปเบเบเบฝเบเปเบเปเบเบปเบงเบขเปเบฒเบเปเบฅเบฐเบเปเบฒเบเบเปเปเบซเบเปเบฒเบเบฐเบเปเบญเบเปเบฎเบฑเบเปเบเบเบเบตเปเบเบฑเบเบเบฐเปเบเบเบเบตเปเบชเปเบฒเบเบเบถเปเบ, เปเบเปเปเบเบเบเบฒเบเปเบเบปเปเบฒเปเบเบเปเปเบเบฒเบกเปเบกเปเบเบเบฝเบเปเบเป teeming เบเบฑเบเบงเบดเบเบตเบเบฒเบ BeginDoSomething เบเบตเปเบเบฑเบเบเบทเบ IAsyncResult เปเบฅเบฐ EndDoSomething เบงเบดเบเบตเบเบฒเบเบเบตเปเปเบเปเบฎเบฑเบเบกเบฑเบ.
เบเปเบฝเบ API เปเบเบตเบกเปเบเบฑเบ Task Based เปเบเบเปเบเปเบเบฅเบฒเบช TaskCompletionSource
เปเบเบทเปเบญเบเบกเบทเบเบตเปเบชเปเบฒเบเบฑเบเบญเบตเบเบญเบฑเบเบซเบเบถเปเบเบเบตเปเบเบฐเบเบดเบเบฒเบฅเบฐเบเบฒเปเบกเปเบเบซเปเบญเบเบฎเบฝเบ TaskCompletionSource. เปเบเบเปเปเบเปเบฒเบเบปเบเบเบญเบเบซเบเปเบฒเบเบตเป, เบเบธเบเบเบฐเบชเบปเบเปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบญเบเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบ, เบกเบฑเบเบญเบฒเบเบเบฐเปเบเบฑเบเบเบฒเบเบฅเบฐเบเบถเบเปเบเบดเบเบงเบดเบเบตเบเบฒเบ RegisterWaitForSingleObject เบเบญเบเบซเปเบญเบเบฎเบฝเบ ThreadPool, เบเบตเปเบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบฝเบเบเปเบฝเบงเบเบฑเบเบเปเบฒเบเปเบเบดเบ. เบเบฒเบเบเปเบฒเปเบเปเบซเปเบญเบเบฎเบฝเบเบเบตเป, เบเปเบฒเบเบชเบฒเบกเบฒเบเบซเปเป APIs asynchronous เปเบเบปเปเบฒเปเบเปเบขเปเบฒเบเบเปเบฒเบเบเบฒเบเปเบฅเบฐเบชเบฐเบเบงเบเปเบ Tasks.
เบเปเบฒเบเบเบฐเปเบงเบปเปเบฒเบงเปเบฒเบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเบงเบดเบเบตเบเบฒเบ FromAsync เบเบญเบเบซเปเบญเบเบฎเบฝเบ TaskFactory เบเบตเปเบกเบตเบเบธเบเบเบฐเบชเบปเบเปเบเบทเปเบญเบเบธเบเบเบฐเบชเบปเบเปเบซเบผเบปเปเบฒเบเบตเป. เปเบเบเบตเปเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเบเปเบญเบเบเบทเปเบเบฐเบซเบงเบฑเบเบเบฑเบเบซเบกเบปเบเบเบญเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒเปเบเบ asynchronous เปเบ .net เบเบตเป Microsoft เปเบเปเบชเบฐเปเบซเบเบตเปเบเปเบฅเบเบฐ 15 เบเบตเบเบตเปเบเปเบฒเบเบกเบฒ: เบเปเบญเบเบเบตเปเบเบฐ Task-Based Asynchronous Pattern (TAP), เบกเบต Asynchronous Programming Pattern (APP), เปเบเบดเปเบ. เปเบกเปเบเบเปเบฝเบงเบเบฑเบเบงเบดเบเบตเบเบฒเบ เปเบฅเบตเปเบกเบเบปเปเบเปเบฎเบฑเบเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเบเบฑเบเบเบทเบเบกเบฒ IAsyncResult เปเบฅเบฐเบงเบดเบเบตเบเบฒเบ เบชเบธเบเบเปเบฒเบDoSomething เบเบตเปเบเบญเบกเบฎเบฑเบเบกเบฑเบเปเบฅเบฐเบชเปเบฒเบฅเบฑเบเบกเปเบฅเบฐเบเบปเบเบเบญเบเบเบตเปเบซเบผเบปเปเบฒเบเบตเปเบงเบดเบเบตเบเบฒเบ FromAsync เปเบกเปเบเบเบฝเบเปเบเปเบเบตเปเบชเบปเบกเบเบนเบเปเบเบ, เปเบเปเปเบกเบทเปเบญเปเบงเบฅเบฒเบเปเบฒเบเปเบ, เบกเบฑเบเบเบทเบเบเปเบฝเบเปเบเบเบเปเบงเบเบฎเบนเบเปเบเบ Asynchronous เปเบซเบเบเบฒเบ (เปเบฅเบฐ AP), เปเบเบดเปเบเบชเบปเบกเบกเบธเบเบงเปเบฒเปเบซเบเบเบฒเบเบซเบเบถเปเบเบเบฐเบเบทเบเบเบปเบเบเบถเปเบเบกเบฒเปเบกเบทเปเบญเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเปเบเบ asynchronous เบชเปเบฒเปเบฅเบฑเบ.
TaskCompletionSource เปเบกเปเบเบเบตเปเบฅเบตเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบซเปเป Tasks เปเบฅเบฐ APIs เปเบเบปเปเบฒเบเบตเปเบชเปเบฒเบเบเบถเปเบเบเบฐเบกเบฒเบเบฎเบนเบเปเบเบเปเบซเบเบเบฒเบ. เปเบเบเปเบเบทเปเบญเปเบเปเปเบฅเปเบงเบเบญเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบญเบเบกเบฑเบเปเบกเปเบเบเบฑเปเบเบเบตเป: เบงเบฑเบเบเบธเบเบญเบเบซเปเบญเบเบฎเบฝเบเบเบตเปเบกเบตเบเบฑเบเบชเบดเบเบชเบฒเบเบฒเบฅเบฐเบเบฐเบเบญเบเบเบฐเปเบเบ Task, เบชเบฐเบเบฒเบเบฐเบเบตเปเบชเบฒเบกเบฒเบเบเบงเบเบเบธเบกเปเบเปเปเบเบเบเปเบฒเบเบงเบดเบเบตเบเบฒเบ SetResult, SetException, เปเบฅเบฐเบญเบทเปเบเปเบเบญเบเบซเปเบญเบเบฎเบฝเบ TaskCompletionSource. เปเบเบชเบฐเบเบฒเบเบเบตเปเบเบตเปเบเบปเบงเบเบฐเบเบดเบเบฑเบเบเบฒเบเบฅเปเบเปเบฒเบเบทเบเบเปเบฒเปเบเปเบเบฑเบเบงเบฝเบเบเบฒเบเบเบตเป, เบกเบฑเบเบเบฐเบเบทเบเบเบฐเบเบดเบเบฑเบเบซเบผเบทเบฅเบปเปเบกเปเบซเบฅเบงเปเบเบเบกเบตเบเปเปเบเบปเบเปเบงเบฑเปเบเปเบเบเบญเบตเบเบเบฒเบกเบงเบดเบเบตเบเบฒเบเบเปเบฒเปเบเปเบเบฑเบ TaskCompletionSource. เบเปเบฒเบกเบฑเบเบเบฑเบเบเปเปเบเบฑเบเปเบเบ, เปเบซเปเปเบเบดเปเบเบเบปเบงเบขเปเบฒเบเบฅเบฐเบซเบฑเบเบเบตเป, เปเบเบดเปเบเบเบฒเบ EAP API เปเบเบปเปเบฒเบเบทเบเบซเปเปเบขเบนเปเปเบ Task เปเบเบเปเบเป TaskCompletionSource: เปเบกเบทเปเบญเปเบซเบเบเบฒเบเปเบเปเบซเบกเป, Task เบเบฐเบเบทเบเบเบฑเบเปเบชเปเปเบเบชเบฐเบเบฒเบเบชเปเบฒเปเบฅเบฑเบ, เปเบฅเบฐเบงเบดเบเบตเบเบฒเบเบเบตเปเบเปเบฒเปเบเปเบเบปเบงเบเบฐเบเบดเบเบฑเบเบเบฒเบเบฅเปเบเปเบฒ. เบงเบฝเบเบเบฒเบเบเบตเปเบเบฐเบเปเบฒเปเบเบตเบเบเบฒเบเบเปเปเปเบเบทเปเบญเบเบซเบผเบฑเบเบเบฒเบเปเบเปเบฎเบฑเบเบงเบฑเบเบเบธ เบเบปเบ.
public static Task<Result> DoAsync(this SomeApiInstance someApiObj) {
var completionSource = new TaskCompletionSource<Result>();
someApiObj.Done +=
result => completionSource.SetResult(result);
someApiObj.Do();
result completionSource.Task;
}
TaskCompletionSource Tips & Tricks
เบเบฒเบเบซเปเป APIs เปเบเบปเปเบฒเบเปเปเปเบกเปเบเบเบฑเบเบซเบกเบปเบเบเบตเปเบชเบฒเบกเบฒเบเปเบฎเบฑเบเปเบเปเปเบเบเปเบเป TaskCompletionSource. เบเบฒเบเบเปเบฒเปเบเปเบซเปเบญเบเบฎเบฝเบเบเบตเปเปเบเบตเบเบเบงเบฒเบกเปเบเบฑเบเปเบเปเบเปเบเบตเปเบซเบเปเบฒเบชเบปเบเปเบเปเบเบเบฒเบเบญเบญเบเปเบเบ APIs เบเปเบฒเบเปเปเบ Tasks เบเบตเปเบเปเปเบเบญเบเบเบญเบเบเบฐเบเบนเป. เปเบฅเบฐเบชเบฒเบเบเปเปเบฒ, เบเบฑเปเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบทเป, เปเบเบฑเบเบเบฑเบเบเบฐเบเบฒเบเบญเบเบเบตเปเบกเบตเบฅเบฒเบเบฒเปเบเบเปเบฅเบฐเบเปเบฒเบเบงเบเบเบญเบเบเบงเบเปเบเบปเบฒเบเบทเบเบเปเบฒเบเบฑเบ (เบชเปเบงเบเปเบซเบเปเปเบกเปเบเบกเบฒเบเบฒเบเบเปเบฒเบเบงเบ RAM). เบเปเปเบเปเบฒเบเบฑเบเบเบตเปเบชเบฒเบกเบฒเบเบเบฑเบเบฅเบธเปเบเปเบขเปเบฒเบเบเปเบฒเบเบเบฒเบเปเบเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒ, เบชเปเบฒเบฅเบฑเบเบเบปเบงเบขเปเบฒเบ, เบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเปเบงเบฑเบเปเบเบเปเบเบตเปเปเบซเบฅเบเบเบตเปเบกเบตเปเบซเบเบเบปเบเบเบฒเบเบเบธเบฅเบฐเบเบดเบเบเบตเปเบชเบฑเบเบชเบปเบ. เบเปเปเบซเปเบเบดเบเบฒเบฅเบฐเบเบฒเบเบงเบฒเบกเปเบเบฑเบเปเบเปเบเปเบเบตเปเบเปเบญเบเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบฑเบเบเบฑเปเบเบเบฐเบเบดเบเบฑเบ trick เปเบเบฑเปเบ Long-Polling.
เปเบเบชเบฑเปเบ, เปเบเบเปเบเบทเปเบญเปเบเปเปเบฅเปเบงเบเบญเบ trick เปเบกเปเบเบเบตเป: เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบฎเบฑเบเบเปเปเบกเบนเบเบเบฒเบ API เบเปเบฝเบงเบเบฑเบเปเบซเบเบเบฒเบเบเบฒเบเบขเปเบฒเบเบเบตเปเปเบเบตเบเบเบทเปเบเบขเบนเปเบเปเบฒเบเบเบญเบเบกเบฑเบ, เปเบเบเบฐเบเบฐเบเบตเป API, เบชเปเบฒเบฅเบฑเบเปเบซเบเบเบปเบเบเบฒเบเบขเปเบฒเบ, เบเปเปเบชเบฒเบกเบฒเบเบฅเบฒเบเบเบฒเบเปเบซเบเบเบฒเบ, เปเบเปเบชเบฒเบกเบฒเบเบชเบปเปเบเบเบทเบเบชเบฐเบเบฒเบเบฐเปเบเบปเปเบฒเบเบฑเปเบ. เบเบปเบงเบขเปเบฒเบเบเบญเบเบเบฒเบเปเบซเบผเบปเปเบฒเบเบตเปเปเบกเปเบ APIs เบเบฑเบเบซเบกเบปเบเบเบตเปเบชเปเบฒเบเบเบถเปเบเบขเบนเปเปเบเบดเบเบชเบธเบเบเบญเบ HTTP เบเปเบญเบเปเบงเบฅเบฒเบเบญเบ WebSocket เบซเบผเบทเปเบงเบฅเบฒเบเบตเปเบกเบฑเบเปเบเบฑเบเปเบเบเปเปเปเบเปเบชเปเบฒเบฅเบฑเบเปเบซเบเบเบปเบเบเบฒเบเบขเปเบฒเบเบเบตเปเบเบฐเปเบเปเปเบเบฑเบเปเบเปเบฅเบขเบตเบเบตเป. เบฅเบนเบเบเปเบฒเบชเบฒเบกเบฒเบเบเบฒเบกเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบ HTTP. เปเบเบตเบเปเบงเบต HTTP เบเปเปเบชเบฒเบกเบฒเบเบฅเบดเปเบฅเบตเปเบกเบเบฒเบเบชเบทเปเบชเบฒเบเบเบฑเบเบฅเบนเบเบเปเบฒเปเบเป. เบเบฒเบเปเบเปเปเบเบเปเบฒเบเปเบเบทเบเบฒเบเบชเบณเบซเบผเบงเบเปเบเบตเบเปเบงเบตเปเบเบเปเบเปเปเบเบทเปเบญเบเบเบฑเบเปเบงเบฅเบฒ, เปเบเปเบญเบฑเบเบเบตเปเบชเปเบฒเบเบเบฒเบเปเบซเบผเบเปเบเบตเปเบกเปเบเบตเบกเปเบเปเบเบตเบเปเบงเบต เปเบฅเบฐเบเบงเบฒเบกเบฅเปเบฒเบเปเบฒเปเบเบตเปเบกเปเบเบตเบกเปเบเบเบชเบฐเปเบฅเปเบ TimerInterval / 2. เปเบเบทเปเบญเปเบฎเบฑเบเปเบซเปเบเบฐเบกเบฒเบเบเบตเป, trick เบเบตเปเปเบญเบตเปเบเบงเปเบฒ Long Polling เปเบเปเบเบทเบเบเบดเบเบเบปเปเบ, เปเบเบดเปเบเบเปเบฝเบงเบเปเบญเบเบเบฑเบเบเบฒเบเบเบฑเบเบเปเบฒเบเบฒเบเบเบญเบเปเบเปเบเบฒเบ. เปเบเบตเบเปเบงเบตเบเบปเบเบเปเบงเบฒเปเบปเบเปเบงเบฅเบฒเปเบปเบเบญเบฒเบเบธ เบซเบผเบทเปเบซเบเบเบฒเบเบเบฐเปเบเบตเบเบเบถเปเบ. เบเปเบฒเปเบซเบเบเบฒเบเปเบเปเปเบเบตเบเบเบทเปเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบกเบฑเบเบเบทเบเบเบธเบเปเบเปเบ, เบเปเบฒเบเปเปเปเบกเปเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบฒเบเบฎเปเบญเบเบเปเบเบฐเบเบทเบเบชเบปเปเบเบญเบตเบเปเบเบทเปเบญเบซเบเบถเปเบ.
while(!eventOccures && !timeoutExceeded) {
CheckTimout();
CheckEvent();
Thread.Sleep(1);
}
เปเบเปเบเบฒเบเปเบเปเปเบเบเบฑเปเบเบเปเบฒเบงเบเบฐเบเบดเบชเบนเบเบงเปเบฒเปเบเบฑเบเบเบตเปเบฎเปเบฒเบเบเบฑเบเบเบตเบเบตเปเบเปเบฒเบเบงเบเบฅเบนเบเบเปเบฒเบฅเปเบเปเบฒเปเบซเบเบเบฒเบเปเบเบตเปเบกเบเบถเปเบ, เปเบเบฒเบฐเบงเปเบฒ ... เปเบเปเบฅเบฐเบฅเบนเบเบเปเบฒเบเบฑเปเบเบเปเบฒเบงเบเบญเบเบเบญเบเบเบฐเบเบนเปเบเบฑเบเบซเบกเบปเบเบฅเปเบเปเบฒเปเบซเบเบเบฒเบ. เปเบกเปเบเปเบฅเปเบง, เปเบฅเบฐเบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบเบเบงเบฒเบกเบฅเปเบฒเบเปเบฒ 1ms เปเบเบตเปเบกเปเบเบตเบกเปเบกเบทเปเบญเปเบซเบเบเบฒเบเบเบทเบเบเบฐเบเบธเปเบ, เบชเปเบงเบเบซเบผเบฒเบเบกเบฑเบเบเบฐเบเปเปเบชเปเบฒเบเบฑเบ, เปเบเปเปเบเบฑเบเบซเบเบฑเบเปเบฎเบฑเบเปเบซเปเบเบญเบเปเบงเบฎเปเบฒเบเปเบฎเบเบเบงเปเบฒเบเบตเปเบกเบฑเบเปเบเบฑเบเปเบเปเบเป? เบเปเบฒเบเบงเบเปเบฎเบปเบฒเปเบญเบปเบฒ Thread.Sleep(1), เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบซเบฅเบเบซเบผเบฑเบเบเบญเบเปเบเปเบเบเปเบเบตเบซเบเบถเปเบ 100% เบเปเปเปเบเปเปเบฎเบฑเบเบงเบฝเบ, rotating เปเบเบงเบปเบเบเบญเบเบเบตเปเบเปเปเบกเบตเบเบฐเปเบซเบเบ. เบเบฒเบเบเปเบฒเปเบเป TaskCompletionSource เบเปเบฒเบเบชเบฒเบกเบฒเบ remake เบฅเบฐเบซเบฑเบเบเบตเปเปเบเปเบขเปเบฒเบเบเปเบฒเบเบเบฒเบเปเบฅเบฐเปเบเปเปเบเบเบฑเบเบซเบฒเบเบฑเบเบซเบกเบปเบเบเบตเปเบฅเบฐเบเบธเปเบงเปเบเปเบฒเบเปเบเบดเบเบเบตเป:
class LongPollingApi {
private Dictionary<int, TaskCompletionSource<Msg>> tasks;
public async Task<Msg> AcceptMessageAsync(int userId, int duration) {
var cs = new TaskCompletionSource<Msg>();
tasks[userId] = cs;
await Task.WhenAny(Task.Delay(duration), cs.Task);
return cs.Task.IsCompleted ? cs.Task.Result : null;
}
public void SendMessage(int userId, Msg m) {
if (tasks.TryGetValue(userId, out var completionSource))
completionSource.SetResult(m);
}
}
เบฅเบฐเบซเบฑเบเบเบตเปเบเปเปเปเบกเปเบเบเบฒเบเบเบฐเบฅเบดเบเบเปเบญเบก, เปเบเปเปเบเบฑเบเบเบปเบงเบขเปเบฒเบ. เปเบเบทเปเบญเปเบเปเบกเบฑเบเปเบเบเปเบฅเบฐเบเบตเบเบตเปเปเบเปเบเบดเบ, เบเปเบฒเบเบเบฑเบเบเปเบญเบเบเบฒเบ, เบขเปเบฒเบเบซเบเปเบญเบ, เปเบเบทเปเบญเบเบฑเบเบเบฒเบเบเบฑเบเบชเบฐเบเบฒเบเบฐเบเบฒเบเปเบเปเบงเบฅเบฒเบเบตเปเบเปเปเบเบงเบฒเบกเบกเบฒเบฎเบญเบเปเบเปเบงเบฅเบฒเบเบตเปเบเปเปเบกเบตเปเบเบเบฒเบเบซเบงเบฑเบเบงเปเบฒ: เปเบเบเปเบฅเบฐเบเบตเบเบตเป, เบงเบดเบเบตเบเบฒเบ AsseptMessageAsync เบเบงเบเบเบฑเบเบเบทเบเบงเบฝเบเบเบฒเบเบเบตเปเบชเปเบฒเปเบฅเบฑเบเปเบฅเปเบง. เบเปเบฒเบเบตเปเปเบกเปเบเบเปเบฅเบฐเบเบตเบเบปเปเบงเปเบเบเบตเปเบชเบธเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบชเบฒเบกเบฒเบเบเบดเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเปเบเป ValueTask.
เปเบกเบทเปเบญเบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบเบเบฒเบเบฎเปเบญเบเบเปเบชเปเบฒเบฅเบฑเบเบเปเปเบเบงเบฒเบก, เบเบงเบเปเบฎเบปเบฒเบชเปเบฒเบเปเบฅเบฐเบงเบฒเบ TaskCompletionSource เปเบเบงเบฑเบเบเบฐเบเบฒเบเบธเบเบปเบก, เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบฅเปเบเปเบฒเบชเบดเปเบเบเบตเปเปเบเบตเบเบเบถเปเบเบเปเบญเบ: เปเบฅเบเบฐเปเบงเบฅเบฒเบเบตเปเบเปเบฒเบเบปเบเปเบงเปเบซเบกเบปเบเบญเบฒเบเบธเบซเบผเบทเบเปเปเบเบงเบฒเบกเปเบเปเบฎเบฑเบ.
ValueTask: เปเบเบฑเบเบซเบเบฑเบเปเบฅเบฐเปเบเบงเปเบ
เบเบปเบงเบเบฐเบเบดเบเบฑเบเบเบฒเบ async / เบฅเปเบเปเบฒ, เบเบทเบเบฑเบเบเบปเบงเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบฑเบเบเบทเบเบเบปเบเบเบฐเบฅเบดเบ, เบชเปเบฒเบเปเบเบทเปเบญเบเบเบฑเบเบเบญเบเบฅเบฑเบเบเบฒเบเบงเบดเบเบตเบเบฒเบ, เปเบฅเบฐเบเบตเปเปเบกเปเบเบเบฒเบเบชเปเบฒเบเบงเบฑเบเบเบธเปเบซเบกเป, เปเบเบดเปเบเปเบเบทเบญเบเบชเบฐเปเบซเบกเบตเบเปเปเบชเปเบฒเบเบฑเบ, เปเบเปเปเบเบเปเบฅเบฐเบเบตเบเบตเปเบซเบฒเบเบฒเบเบกเบฑเบเบเปเปเบชเบฒเบกเบฒเบเบชเปเบฒเบเบเบฑเบเบซเบฒเปเบเป. เบเปเบฅเบฐเบเบตเบเบตเปเบญเบฒเบเบเบฐเปเบเบฑเบเบงเบดเบเบตเบเบฒเบเบเบตเปเปเบญเบตเปเบเบงเปเบฒเปเบฅเบทเปเบญเบเป, เบเบงเบเปเบฎเบปเบฒเบเปเบฒเบฅเบฑเบเปเบงเบปเปเบฒเปเบเบดเบเบซเบผเบฒเบเบชเบดเบเปเบฅเบฐเบซเบผเบฒเบเบฎเปเบญเบเบเบฑเบเบเบฒเบเปเบเบเปเปเบงเบดเบเบฒเบเบต. เบเปเบฒเบงเบดเบเบตเบเบฒเบเบเบฑเปเบเบเปเบฒเบงเบเบทเบเบเบฝเบเปเบงเปเปเบเบฅเบฑเบเบชเบฐเบเบฐเบเบฑเปเบเบเปเบฒเบง, เปเบเบเปเบฅเบฐเบเบตเบซเบผเบฒเบเบเบตเปเบชเบธเบ, เบกเบฑเบเบเบฐเบชเบปเปเบเบเบทเบเบเบปเบเปเบเปเบฎเบฑเบเบเบตเปเบเปเบฒเบกเบงเบดเบเบตเบเบฒเบเบฅเปเบเปเบฒเบเบฑเบเบซเบกเบปเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ .NET เบชเบฐเบซเบเบญเบเปเบเบทเปเบญเบเบกเบทเปเบเบทเปเบญเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบเบเบตเป - เปเบเบเบชเปเบฒเบ ValueTask . เปเบเบทเปเบญเปเบฎเบฑเบเปเบซเปเบกเบฑเบเบเบฑเบเปเบเบ, เปเบซเปเปเบเบดเปเบเบเบปเบงเบขเปเบฒเบเบเบญเบเบเบฒเบเบเปเบฒเปเบเปเบเบญเบเบกเบฑเบ: เบกเบต cache เบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบเบซเบฒเปเบฅเบทเปเบญเบเป. เบกเบตเบกเบนเบเบเปเบฒเบเบฒเบเบขเปเบฒเบเบขเบนเปเปเบเบเบฑเปเบเปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเบเบฝเบเปเบเปเบชเบปเปเบเบเบทเบเปเบซเปเปเบเบปเบฒเปเบเบปเปเบฒ; เบเปเบญเบเบเปเบญเบเบเบฒเบเปเบฎเบฑเบเปเบเบเบเปเปเบเบปเบเบเบฑเบ, เบเบถเปเบเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเบงเบดเบเบตเบเบฒเบเบเบฑเบเบซเบกเบปเบเบเบฐเบเบฒเบเปเบเบฑเบเบเปเปเบเบดเปเบ. เบเบฑเปเบเบเบฑเปเบ, เบงเบดเบเบตเบเบตเปเบเบฐเปเบเปเบเปเบเบเบฒเบเบเบฝเบเบงเบดเบเบตเบเบฒเบเปเบกเปเบเบเบฑเปเบเบเปเปเปเบเบเบตเป:
public async Task<string> GetById(int id) {
if (cache.TryGetValue(id, out string val))
return val;
return await RequestById(id);
}
เปเบเบทเปเบญเบเบเบฒเบเบเบงเบฒเบกเบเบฒเบเบฐเบซเบเบฒเบเบตเปเบเบฐเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบเปเบฅเบฑเบเบเปเบญเบ, เปเบฅเบฐเบเบงเบฒเบกเบขเปเบฒเบเบเบปเบงเปเบฅเบฑเบเบเปเบญเบเบเบญเบเบชเบดเปเบเบเบตเป Roslyn เบเบฐเบชเปเบฒเบเปเบเปเบงเบฅเบฒเบเบตเปเบฅเบงเบเบฅเบงเบกเบฅเบฐเบซเบฑเบเบเบตเป, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเบฝเบเบเบทเบเบเบปเบงเบขเปเบฒเบเบเบตเปเบเบฑเปเบเบเปเปเปเบเบเบตเป:
public Task<string> GetById(int id) {
if (cache.TryGetValue(id, out string val))
return Task.FromResult(val);
return RequestById(id);
}
เปเบเปเบเบดเบเปเบฅเปเบง, เบเบฒเบเปเบเปเปเบเบเบตเปเบเบตเบเบตเปเบชเบธเบเปเบเบเปเบฅเบฐเบเบตเบเบตเปเปเบกเปเบเบเบฒเบเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบเบเบญเบเปเบชเบฑเปเบเบเบฒเบเบฎเปเบญเบ, เบเบท, เบเบฒเบเปเบเปเบฎเบฑเบเบกเบนเบเบเปเบฒเบเบฒเบเบงเบฑเบเบเบฐเบเบฒเบเบธเบเบปเบกเปเบเบเบเปเปเบกเบตเบเบฒเบเบเบฑเบเบชเบฑเบเบเบตเปเบเปเปเบเปเบฒเปเบเบฑเบเปเบฅเบฐเบเบฒเบเปเบซเบผเบเบขเบนเปเปเบ GC, เปเบเบเบฐเบเบฐเบเบตเปเปเบเบเปเบฅเบฐเบเบตเบเบตเปเบซเบฒเบเบฒเบเปเบเปเบงเบฅเบฒเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฑเบเบเปเบญเบเบเบฒเบเปเบเบซเบฒ IO เบชเปเบฒเบฅเบฑเบเบเปเปเบกเบนเบ. , เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเบเบฐเบเบฑเบเบเบปเบเปเบเบฑเบเบเบงเบ / เบฅเบปเบเปเบเบเปเบเบปเปเบฒ:
public ValueTask<string> GetById(int id) {
if (cache.TryGetValue(id, out string val))
return new ValueTask<string>(val);
return new ValueTask<string>(RequestById(id));
}
เบเปเปเบซเปเบเบดเบเบฒเบฅเบฐเบเบฒเบขเปเบฒเบเบฅเบฐเบญเบฝเบเบเปเบฝเบงเบเบฑเบเบเบดเปเบเบชเปเบงเบเบเบญเบเบฅเบฐเบซเบฑเบเบเบตเป: เบเปเบฒเบกเบตเบกเบนเบเบเปเบฒเปเบ cache, เบเบงเบเปเบฎเบปเบฒเบชเปเบฒเบเปเบเบเบชเปเบฒเบ, เบเปเบฒเบเปเปเบเบฑเปเบเบเบฑเปเบเบงเบฝเบเบเบฒเบเบเบตเปเปเบเปเบเบดเบเบเบฐเบเบทเบเบซเปเปเบเปเบงเบเบเบงเบฒเบกเบซเบกเบฒเบ. เบฅเบฐเบซเบฑเบเบเบฒเบเปเบเบเปเปเบชเบปเบเปเบเปเบชเบฑเปเบเบเบฒเบเปเบเบเบตเปเบฅเบฐเบซเบฑเบเบเบตเปเบเบทเบเบเบฐเบเบดเบเบฑเบเปเบ: ValueTask, เบเบฒเบเบเบธเบเบเบญเบ syntax C#, เบเบฐเบเบฐเบเบดเบเบฑเบเบเบทเบเบฑเบเบเบฑเบ Task เบเบปเบเบเบฐเบเบดเปเบเบเปเบฅเบฐเบเบตเบเบตเป.
TaskSchedulers: เบเบฒเบเบเบธเปเบกเบเบญเบเบเบธเบเบเบฐเบชเบฒเบเบเบฒเบเปเบเบตเบเบเบปเบงเบงเบฝเบเบเบฒเบ
API เบเปเปเปเบเบเบตเปเบเปเบญเบเบขเบฒเบเบเบดเบเบฒเบฅเบฐเบเบฒเปเบกเปเบเบซเปเบญเบเบฎเบฝเบ TaskScheduler เปเบฅเบฐเบญเบฐเบเบธเบเบฑเบเบเบญเบเบกเบฑเบ. เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเปเบฒเบงเบกเบฒเปเบฅเปเบงเบเปเบฒเบเปเบเบดเบเบงเปเบฒ TPL เบกเบตเบเบงเบฒเบกเบชเบฒเบกเบฒเบเปเบเบเบฒเบเบเบธเปเบกเบเบญเบเบเบธเบเบเบฐเบชเบฒเบเบเบฒเบเปเบเบเบขเบฒเบเบงเบฝเบเบเบฒเบเปเบเบเบปเปเบงเบเบฐเบเบนเป. เบเบธเบเบเบฐเบชเบฒเบเบเบฑเปเบเบเปเบฒเบงเบเบทเบเบเปเบฒเบเบปเบเบขเบนเปเปเบเบฅเบนเบเบซเบฅเบฒเบเบเบญเบเบเบฑเปเบ TaskScheduler. เปเบเบทเบญเบเบเบธเบเบเบธเบเบเบฐเบชเบฒเบเบเบตเปเปเบเบปเปเบฒเบญเบฒเบเบเบฐเบเปเบญเบเบเบฒเบเบชเบฒเบกเบฒเบเบเบปเบเปเบเปเปเบเบซเปเบญเบเบชเบฐเปเบธเบ. ParallelExtensionsExtras, เบเบฑเบเบเบฐเบเบฒเปเบเบ Microsoft, เปเบเปเบเปเปเปเบกเปเบเบชเปเบงเบเบซเบเบถเปเบเบเบญเบ .NET, เปเบเปเบชเบฐเบซเบเบญเบเปเบซเปเปเบเบฑเบเบเบธเบ Nuget. เบเปโเปเบซเปโเปเบเบดเปเบโเบเบฒเบโเบขเปเบฒเบโเปเบเบโเบซเบเปเปโเบเบญเบโเบเบงเบโเปเบเบปเบฒโ:
- CurrentThreadTaskScheduler โ เบเบฐโเบเบดโเบเบฑเบโเบงเบฝเบโเบเบฒเบโเบเปเบฝเบงโเบเบฑเบโเบเบฐโเบเบนเปโเบเบฐโเบเบธโเบเบฑเบโ
- LimitedConcurrencyLevelTaskScheduler - เบเปเบฒโเบเบฑเบโเบเปเบฒโเบเบงเบโเบเบญเบโเบซเบเปเบฒโเบงเบฝเบโเบเบตเปโเบเบฐโเบเบดโเบเบฑเบโเบเปเบญเบกโเบเบฑเบโเปเบเบโเบเบฒโเบฃเบฒโเบกเบดโเปเบเบต Nโ, เบเบตเปโเบเบทเบโเบเบญเบกโเบฎเบฑเบโเปเบ constructor
- OrderedTaskScheduler โ เบเบทเบเบเปเบฒเบเบปเบเปเบเบฑเบ LimitedConcurrencyLevelTaskScheduler(1), เบเบฑเปเบเบเบฑเปเบเบงเบฝเบเบเบฒเบเบเบฐเบเบทเบเบเบฐเบเบดเบเบฑเบเบเบฒเบกเบฅเปเบฒเบเบฑเบ.
- WorkStealingTaskScheduler - เบเบฐเบเบดเบเบฑเบ
เบเบฒเบเบฅเบฑเบเปเบฎเบฑเบเบงเบฝเบ เบงเบดเบเบตเบเบฒเบเปเบเบเบขเบฒเบเบงเบฝเบเบเบฒเบ. เปเบเบเบเบทเปเบเบเบฒเบเปเบฅเปเบงเบกเบฑเบเปเบกเปเบ ThreadPool เปเบเบเบเปเบฒเบเบซเบฒเบ. เปเบเปเปเบเบเบฑเบเบซเบฒเบเบตเปเปเบ .NET ThreadPool เปเบเบฑเบเบซเปเบญเบเบฎเบฝเบ static, เบซเบเบถเปเบเบชเปเบฒเบฅเบฑเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบฑเบเบซเบกเบปเบ, เบเบถเปเบเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเบเบฒเบ overloading เบซเบผเบทเบเบฒเบเบเปเบฒเปเบเปเบเปเปเบเบทเบเบเปเบญเบเปเบเบชเปเบงเบเบซเบเบถเปเบเบเบญเบเปเบเบเบเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเปเบเบชเบนเปเบเบฒเบเบเบปเบเบเปเบฒเบเบเบฝเบเปเบเบญเบตเบ. เบเบดเปเบเปเบเบเบงเปเบฒเบเบฑเปเบ, เบกเบฑเบเปเบเบฑเบเบเบฒเบเบเบฒเบเบเบตเปเบชเบธเบเบเบตเปเบเบฐเปเบเบปเปเบฒเปเบเบชเบฒเปเบซเบเบเบญเบเบเปเปเบเบปเบเบเปเบญเบเบเบฑเปเบเบเปเบฒเบง. เบเบฑเปเบ. เบญเบฒเบเบเบฐเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเป WorkStealingTaskSchedulers เปเบเบเบเปเบฒเบเบซเบฒเบเปเบเบชเปเบงเบเบเปเบฒเบเปเบเบญเบเปเบเบฅเปเบเบฅเบกเบเบตเปเบเบฒเบเบเปเบฒเปเบเป ThreadPool เบญเบฒเบเบเบฐเบฎเบธเบเบฎเบฒเบเปเบฅเบฐเบเปเปเบชเบฒเบกเบฒเบเบเบฒเบเปเบเบปเบฒเปเบเป. - QueuedTaskScheduler โ เบญเบฐโเบเบธโเบเบฒเบโเปเบซเปโเบเปเบฒเบโเบเบฐโเบเบดโเบเบฑเบโเบงเบฝเบโเบเบฒเบโเบเบฒเบกโเบเบปเบโเบฅเบฐโเบเบฝเบโเปเบเบงโเบเบนโเบฅเบดโเบกเบฐโเบชเบดเบโ
- ThreadPerTaskScheduler โ เบชเปเบฒเบเบเบฐเบเบนเปเปเบเบเบเปเบฒเบเบซเบฒเบเบชเปเบฒเบฅเบฑเบเปเบเปเบฅเบฐ Task เบเบตเปเบเบทเบเบเบฐเบเบดเบเบฑเบเบขเบนเปเปเบเบกเบฑเบ. เบชเบฒเบกเบฒเบเปเบเบฑเบเบเบฐเปเบซเบเบเบชเปเบฒเบฅเบฑเบเบงเบฝเบเบเบฒเบเบเบตเปเปเบเปเปเบงเบฅเบฒเบเบปเบ unpredictable เบเบตเปเบเบฐเบชเปเบฒเปเบฅเบฑเบ.
เบกเบตเบฅเบฒเบเบฅเบฐเบญเบฝเบเบเบตเปเบเบต
เบชเบณเบฅเบฑเบเบเบฒเบเบเบตเบเบฑเบเบเบตเปเบชเบฐเบเบงเบเบเบญเบเบเบธเบเบขเปเบฒเบเบเบตเปเบเปเบฝเบงเบเปเบญเบเบเบฑเบ Tasks, Visual Studio เบกเบตเปเปเบฒเบเปเบฒเบ Tasks. เบขเบนเปเปเบเบเปเบญเบเบขเปเบฝเบกเบเบตเป, เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบดเปเบเบชเบฐเบเบฒเบเบฐเบเบฒเบเบเบฐเบเบธเบเบฑเบเบเบญเบเบซเบเปเบฒเบงเบฝเบเปเบฅเบฐเปเบเบฑเปเบเปเบเบซเบฒเปเบชเบฑเปเบเบเบฐเบเบดเบเบฑเบเบเบฐเบเบธเบเบฑเบเบเบญเบเบฅเบฐเบซเบฑเบ.
PLinq เปเบฅเบฐเบซเปเบญเบเบฎเบฝเบเบเบฐเบซเบเบฒเบ
เบเบญเบเปเบซเบเบทเบญเปเบเบเบฒเบ Tasks เปเบฅเบฐเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเบเบตเปเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเบเบงเบเบกเบฑเบ, เบกเบตเบชเบญเบเปเบเบทเปเบญเบเบกเบทเบเบตเปเบซเบเปเบฒเบชเบปเบเปเบเบซเบผเบฒเบเปเบ .NET: PLinq (Linq2Parallel) เปเบฅเบฐเบซเปเบญเบเบฎเบฝเบเบเบฐเบซเบเบฒเบ. เบเปเบฒเบญเบดเบเบชเบฑเบเบเบฒเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฐเบซเบเบฒเบเบเบญเบเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบ Linq เบเบฑเบเบซเบกเบปเบเปเบเบซเบผเบฒเบเบซเบปเบงเบเปเป. เบเปเบฒเบเบงเบเบเบฐเบเบนเปเบชเบฒเบกเบฒเบเบเบทเบเบเบฑเปเบเบเปเบฒเปเบเบเปเบเปเบงเบดเบเบตเบเบฒเบเบเบฐเบซเบเบฒเบ WithDegreeOfParallelism. เปเบเปเบซเบเปเบฒเปเบชเบเบเบฒเบ, เบชเปเบงเบเบซเบผเบฒเบเบกเบฑเบ, PLinq เปเบเบฎเบนเบเปเบเบเปเบฅเบตเปเบกเบเบปเปเบเบเบญเบเบกเบฑเบเบเปเปเบกเบตเบเปเปเบกเบนเบเบเบฝเบเบเปเบเปเบฝเบงเบเบฑเบเบเบฒเบเปเบเบเบญเบเปเบซเบผเปเบเบเปเปเบกเบนเบเบเบญเบเบเปเบฒเบเปเบเบทเปเบญเปเบซเปเปเบเปเบเบงเบฒเบกเปเบงเบเบตเปเบชเปเบฒเบเบฑเบ, เปเบเบเบฒเบเบเบปเบเบเบฑเบเบเปเบฒเบก, เบเปเบฒเปเบเปเบเปเบฒเบเบเบญเบเบเบงเบฒเบกเบเบฐเบเบฒเบเบฒเบกเปเบกเปเบเบเปเปเบฒเบซเบผเบฒเบ: เบเปเบฒเบเบเบฝเบเปเบเปเบเปเบญเบเบเบฒเบเปเบเบซเบฒเบงเบดเบเบตเบเบฒเบ AsParallel เบเปเบญเบ. เบฅเบฐเบเบปเบเบเปเบญเบเปเบชเปเบเบญเบเบงเบดเบเบตเบเบฒเบ Linq เปเบฅเบฐเบเปเบฒเปเบเบตเบเบเบฒเบเบเบปเบเบชเบญเบเบเบฐเบชเบดเบเบเบดเบเบฒเบ. เบเบดเปเบเปเบเบเบงเปเบฒเบเบฑเปเบ, เบกเบฑเบเปเบเบฑเบเปเบเปเบเปเบเบตเปเบเบฐเบชเบปเปเบเบเปเปเบกเบนเบเปเบเบตเปเบกเปเบเบตเบกเปเบซเป PLinq เบเปเบฝเบงเบเบฑเบเบฅเบฑเบเบชเบฐเบเบฐเบเบญเบเปเบซเบผเปเบเบเปเปเบกเบนเบเบเบญเบเบเปเบฒเบเปเบเบเปเบเปเบเบปเบเปเบเบเบฒเบเปเบเปเบเบชเปเบงเบ. เบเปเบฒเบเบชเบฒเบกเบฒเบเบญเปเบฒเบเปเบเบตเปเบกเปเบเบตเบก
Parallel static class เบชเบฐเปเบญเบเบงเบดเบเบตเบเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบ iterating เปเบเบเบเปเบฒเบ Foreach collection เปเบเบเบฐเบซเบเบฒเบ, เบเบฐเบเบดเบเบฑเบเบชเปเบฒเบฅเบฑเบ loop, เปเบฅเบฐเบเบฐเบเบดเบเบฑเบเบเบปเบงเปเบเบเบซเบผเบฒเบเปเบเบเบฐเบซเบเบฒเบ Invoke. เบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฐเบเบนเปเบเบฐเบเบธเบเบฑเบเบเบฐเบเบทเบเบขเบธเบเบเบปเบเบเปเบงเบฒเบเบฒเบเบเบดเบเปเบฅเปเบชเปเบฒเปเบฅเบฑเบ. เบเปเบฒโเบเบงเบโเบเบญเบโเบเบฐโเบเบนเปโเบชเบฒโเบกเบฒเบโเปเบเปโเบฎเบฑเบโเบเบฒเบโเบเบฑเปเบโเบเปเบฒโเปเบเบโเบเบฒเบโเบเปเบฒเบ ParallelOptions เปเบเบฑเบโเบเบฒเบโเปเบเปโเบเบฝเบโเบชเบธเบโเบเปเบฒเบโ. เบเปเบฒเบเบเบฑเบเบชเบฒเบกเบฒเบเบฅเบฐเบเบธ TaskScheduler เปเบฅเบฐ CancellationToken เปเบเบเปเบเปเบเบปเบงเปเบฅเบทเบญเบเบเปเบฒเบเป.
เบเบฒเบเบเบปเปเบเบเบปเบ
เปเบกเบทเปเบญเบเปเบญเบเปเบฅเบตเปเบกเบเบฝเบเบเบปเบเบเบงเบฒเบกเบเบตเปเปเบเบเบญเบตเบเปเบชเปเปเบญเบเบฐเบชเบฒเบเบเบญเบเบเบปเบเบฅเบฒเบเบเบฒเบเบเบญเบเบเปเบญเบเปเบฅเบฐเบเปเปเบกเบนเบเบเบตเปเบเปเบญเบเปเบเบฑเบเบเปเบฒเปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบญเบเบเปเบญเบเบซเบผเบฑเบเบเบฒเบเบกเบฑเบ, เบเปเบญเบเบเปเปเปเบเปเบเบฒเบเบซเบงเบฑเบเบงเปเบฒเบเบฐเบกเบตเบซเบผเบฒเบ. เปเบเบเบฑเบเบเบธเบเบฑเบ, เปเบเปเบงเบฅเบฒเบเบตเปเบเบฑเบเบเบฒเบเบดเบเบฒเบเบเปเปเบเบงเบฒเบกเบเบตเปเบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบดเบกเบเบปเบเบเบงเบฒเบกเบเบตเป reproachfully เบเบญเบเบเปเบฒเบเบฐเปเบเบปเปเบฒเบงเปเบฒเบซเบเปเบฒ 15 เปเบเปเบซเบกเบปเบเปเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเบชเบฐเบซเบผเบธเบเบเบปเบเปเบเปเบฎเบฑเบเบเบปเปเบงเบเบฒเบง. tricks เบญเบทเปเบเป, APIs, เปเบเบทเปเบญเบเบกเบทเบชเบฒเบเบเบฒเปเบฅเบฐ pitfalls เบเบฐเปเบเปเบฎเบฑเบเบเบฒเบเบเบงเบกเปเบญเบปเบฒเปเบเบเบปเบเบเบงเบฒเบกเบเปเปเปเบ.
เบเปเปเบชเบฐเบซเบผเบธเบ:
- เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบฎเบนเปเปเบเบทเปเบญเบเบกเบทเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบฐเบเบนเป, asynchrony เปเบฅเบฐเบเบฐเบซเบเบฒเบเปเบเบทเปเบญเบเปเบฒเปเบเปเบเบฑเบเบเบฐเบเบฒเบเบญเบเบเบญเบเปเบเบทเปเบญเบเบเบญเบกเบเบดเบงเปเบเบตเบเบตเปเบเบฑเบเบชเบฐเปเบซเบก.
- .NET เบกเบตเปเบเบทเปเบญเบเบกเบทเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบเบซเบผเบฒเบเบชเปเบฒเบฅเบฑเบเบเบธเบเบเบฐเบชเบปเบเปเบซเบผเบปเปเบฒเบเบตเป
- เบเปเปเปเบกเปเบเบเบงเบเบกเบฑเบเบเบฑเบเบซเบกเบปเบเบเบฒเบเบปเบเบขเบนเปเปเบเปเบงเบฅเบฒเบเบฝเบง, เบเบฑเปเบเบเบฑเปเบเบเปเบฒเบเบกเบฑเบเบเบฐเบชเบฒเบกเบฒเบเบเบญเบเบซเบฒเบกเปเบฅเบฐเบเบปเบ, เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เบกเบตเบงเบดเบเบตเบเบตเปเบเบฐเบเปเบฝเบ APIs เปเบเบปเปเบฒเปเบเบเบเปเปเบเปเบญเบเปเบเปเบเบงเบฒเบกเบเบฐเบเบฒเบเบฒเบกเบซเบผเบฒเบ.
- เบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบฐเบเบนเปเปเบ .NET เปเบกเปเบเบชเบฐเปเบเบเปเบเบเบซเปเบญเบเบฎเบฝเบ Thread เปเบฅเบฐ ThreadPool
- เบงเบดเบเบตเบเบฒเบ Thread.Abort, Thread.Interrupt, เปเบฅเบฐ Win32 API TerminateThread เปเบกเปเบเบญเบฑเบเบเบฐเบฅเบฒเบ เปเบฅเบฐเบเปเปเปเบเปเบเบทเบเปเบเบฐเบเบณเปเบซเปเปเบเป. เปเบเบเบเบตเปเบเบฐ, เบกเบฑเบเบเบตเบเบงเปเบฒเบเบตเปเบเบฐเปเบเปเบเบปเบเปเบ CancellationToken
- เบเบฒเบเปเบซเบผเปเบเบปเปเบฒเปเบเบฑเบเบเบฑเบเบเบฐเบเบฒเบเบญเบเบเบตเปเบกเบตเบเบธเบเบเปเบฒเปเบฅเบฐเบเบฒเบเบชเบฐเบซเบเบญเบเบเบญเบเบกเบฑเบเปเบกเปเบเบเปเบฒเบเบฑเบ. เบชเบฐเบเบฒเบเบฐเบเบฒเบเบเบตเปเบเบฐเบเบนเปเบเปเปเบซเบงเปเบฒเบเบฅเปเบเปเบฒเปเบซเบเบเบฒเบเบเบงเบเบซเบผเบตเบเปเบงเบฑเปเบ. เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบตเปเบกเบฑเบเบชเบฐเบเบงเบเบเบตเปเบเบฐเบเปเบฒเปเบเปเบซเปเบญเบเบฎเบฝเบ TaskCompletionSource
- เปเบเบทเปเบญเบเบกเบท .NET เบเบตเปเบกเบตเบเบฐเบชเบดเบเบเบดเบเบฒเบ เปเบฅเบฐเบเปเบฒเบงเปเปเบฒเบเบตเปเบชเบธเบเบชเบณเบฅเบฑเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบฐเปเบฒเบ เปเบฅเบฐเปเบเบเบเปเปเบเบปเบเบเบฑเบเปเบกเปเบ Tasks.
- เบเบนเปเบเบฐเบเบดเบเบฑเบเบเบฒเบ c# async/await เบเบฐเบเบดเบเบฑเบเปเบเบงเบเบงเบฒเบกเบเบดเบเบเบญเบเบเบฒเบเบฅเปเบเปเบฒเบเบตเปเบเปเปเบกเบตเบเบฒเบเบเบฑเบเบเบงเบฒเบ
- เบเปเบฒเบเบชเบฒเบกเบฒเบเบเบงเบเบเบธเบกเบเบฒเบเปเบเบเบขเบฒเบ Tasks เปเบเบเบปเปเบงเบซเบปเบงเบเปเปเปเบเบเปเบเป TaskScheduler-derived classes
- เปเบเบเบชเปเบฒเบ ValueTask เบชเบฒเบกเบฒเบเปเบเบฑเบเบเบฐเปเบซเบเบเปเบเบเบฒเบเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบเปเบชเบฑเปเบเบเบฒเบเบฎเปเบญเบ เปเบฅเบฐ memory-traffic
- เปเปเบฒเบเปเบฒเบเปเปเบฒเบงเบฝเบ เปเบฅเบฐเบเบฐเบเบนเปเบเบญเบ Visual Studio เบชเบฐเปเบญเบเบเปเปเบกเบนเบเบซเบผเบฒเบเบขเปเบฒเบเบเบตเปเปเบเบฑเบเบเบฐเปเบซเบเบเบชเบณเบฅเบฑเบเบเบฒเบเบเบตเบเบฑเบเบซเบผเบฒเบเบเบฐเบเบนเป เบซเบผเบท เบฅเบฐเบซเบฑเบเบเปเปเบเบดเปเบ.
- PLinq เปเบเบฑเบโเปเบเบทเปเบญเบโเบกเบทโเบเบตเปโเปเบขเบฑเบโ, เปเบเปโเบงเปเบฒโเบกเบฑเบโเบญเบฒเบโเบเบฐโเบเปเปโเบกเบตโเบเปเปโเบกเบนเบโเบเบฝเบโเบเปโเบเปเบฝเบงโเบเบฑเบโเปเบซเบผเปเบโเบเปเปโเบกเบนเบโเบเบญเบโเบเปเบฒเบโ, เปเบเปโเบเบตเปโเบชเบฒโเบกเบฒเบโเปเบเปโเปเบโเปเบเปโเปเบเบโเบเปเบฒโเปเบเปโเบเบปเบโเปเบโเบเบฒเบโเปเบเปเบโเบเบฑเบโ.
- เบเบดเบโเบเบฒเบกโเบเบญเบโเบเปเปโเปเบโฆ
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com