.NET: เชฎเชฒเซเชŸเชฟเชฅเซเชฐเซ‡เชกเซ€เช‚เช— เช…เชจเซ‡ เช…เชธเชฟเช‚เช•เซเชฐเซ‹เชจเซ€ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เชธเชพเชงเชจเซ‹. เชญเชพเช— 1

เชนเซเช‚ เชฎเซ‚เชณ เชฒเซ‡เช– Habr เชชเชฐ เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเซ€ เชฐเชนเซเชฏเซ‹ เช›เซเช‚, เชœเซ‡เชจเซ‹ เช…เชจเซเชตเชพเชฆ เช•เซ‹เชฐเซเชชเซ‹เชฐเซ‡เชŸเชฎเชพเช‚ เชชเซ‹เชธเซเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เช›เซ‡ เชฌเซเชฒเซ‹เช— เชชเซ‹เชธเซเชŸ.

เช…เชนเซ€เช‚ เช…เชจเซ‡ เชนเชตเซ‡ เชชเชฐเชฟเชฃเชพเชฎเชจเซ€ เชฐเชพเชน เชœเซ‹เชฏเชพ เชตเชฟเชจเชพ, เช…เชธเซเชฎเซ‡เชณ เชฐเซ€เชคเซ‡ เช•เช‚เชˆเช• เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เช…เชฅเชตเชพ เชคเซ‡ เช•เชฐเซ€ เชฐเชนเซ‡เชฒเชพ เช˜เชฃเชพ เชเช•เชฎเซ‹ เชตเชšเซเชšเซ‡ เชฎเซ‹เชŸเชพ เช•เชพเชฐเซเชฏเชจเซ‡ เชตเชฟเชญเชพเชœเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เช•เชฎเซเชชเซเชฏเซเชŸเชฐเชจเชพ เช†เช—เชฎเชจ เชชเชนเซ‡เชฒเชพเช‚ เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚ เช›เซ‡. เชคเซ‡เชฎเชจเชพ เช†เช—เชฎเชจ เชธเชพเชฅเซ‡, เช† เชœเชฐเซ‚เชฐเชฟเชฏเชพเชค เช–เซ‚เชฌ เชœ เชฎเซ‚เชฐเซเชค เชฌเชจเซ€ เชนเชคเซ€. เชนเชตเซ‡, 2019 เชฎเชพเช‚, เชนเซเช‚ เช† เชฒเซ‡เช– 8-เช•เซ‹เชฐ เช‡เชจเซเชŸเซ‡เชฒ เช•เซ‹เชฐ เชชเซเชฐเซ‹เชธเซ‡เชธเชฐ เชธเชพเชฅเซ‡ เชฒเซ‡เชชเชŸเซ‹เชช เชชเชฐ เชŸเชพเช‡เชช เช•เชฐเซ€ เชฐเชนเซเชฏเซ‹ เช›เซเช‚, เชœเซ‡เชจเชพ เชชเชฐ เชธเซ‹ เช•เชฐเชคเชพเช‚ เชตเชงเซ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“ เชธเชฎเชพเช‚เชคเชฐ เชšเชพเชฒเซ€ เชฐเชนเซ€ เช›เซ‡, เช…เชจเซ‡ เชคเซ‡เชจเชพเชฅเซ€ เชชเชฃ เชตเชงเซ เชฅเซเชฐเซ‡เชกเซ‹. เชจเชœเซ€เช•เชฎเชพเช‚, เชฅเซ‹เชกเซ‹ เชšเซ€เช‚เชฅเชฐเซ‡เชนเชพเชฒ เชซเซ‹เชจ เช›เซ‡, เชœเซ‡ เชฅเซ‹เชกเชพ เชตเชฐเซเชทเซ‹ เชชเชนเซ‡เชฒเชพ เช–เชฐเซ€เชฆเซเชฏเซ‹ เชนเชคเซ‹, เชคเซ‡เชฎเชพเช‚ 8-เช•เซ‹เชฐ เชชเซเชฐเซ‹เชธเซ‡เชธเชฐ เชฌเซ‹เชฐเซเชก เชชเชฐ เช›เซ‡. เชตเชฟเชทเชฏเซ‹เชจเซเช‚ เชธเช‚เชธเชพเชงเชจเซ‹ เชฒเซ‡เช–เซ‹ เช…เชจเซ‡ เชตเชฟเชกเชฟเช“เชเชฅเซ€ เชญเชฐเซ‡เชฒเชพ เช›เซ‡ เชœเซเชฏเชพเช‚ เชคเซ‡เชฎเชจเชพ เชฒเซ‡เช–เช•เซ‹ เช† เชตเชฐเซเชทเชจเชพ เชซเซเชฒเซ‡เช—เชถเชฟเชช เชธเซเชฎเชพเชฐเซเชŸเชซเซ‹เชจเซเชธเชจเซ€ เชชเซเชฐเชถเช‚เชธเชพ เช•เชฐเซ‡ เช›เซ‡ เชœเซ‡ 16-เช•เซ‹เชฐ เชชเซเชฐเซ‹เชธเซ‡เชธเชฐ เชงเชฐเชพเชตเซ‡ เช›เซ‡. MS Azure 20 เช•เซ‹เชฐ เชชเซเชฐเซ‹เชธเซ‡เชธเชฐ เช…เชจเซ‡ 128 TB RAM เชธเชพเชฅเซ‡เชจเซเช‚ เชตเชฐเซเชšเซเชฏเซเช…เชฒ เชฎเชถเซ€เชจ $2/เช•เชฒเชพเช•เชฅเซ€ เช“เช›เชพ เชธเชฎเชฏเชฎเชพเช‚ เชชเซ‚เชฐเซเช‚ เชชเชพเชกเซ‡ เช›เซ‡. เช•เชฎเชจเชธเซ€เชฌเซ‡, เชฅเซเชฐเซ‡เชกเซ‹เชจเซ€ เช•เซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชธเช‚เชšเชพเชฒเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เชธเชฎเชฐเซเชฅ เชฅเชฏเชพ เชตเชฟเชจเชพ เชฎเชนเชคเซเชคเชฎ เชฎเซ‡เชณเชตเชตเชพ เช…เชจเซ‡ เช† เชถเช•เซเชคเชฟเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เช…เชถเช•เซเชฏ เช›เซ‡.

เชชเชฐเชฟเชญเชพเชทเชพ

เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ - OS เช‘เชฌเซเชœเซ‡เช•เซเชŸ, เช…เชฒเช— เชธเชฐเชจเชพเชฎเชพเช‚เชจเซ€ เชœเช—เซเชฏเชพ, เชฅเซเชฐเซ‡เชกเซ‹ เชงเชฐเชพเชตเซ‡ เช›เซ‡.
เชฅเซเชฐเซ‡เชก - เชเช• OS เช‘เชฌเซเชœเซ‡เช•เซเชŸ, เชเช•เซเชเซ‡เช•เซเชฏเซเชถเชจเชจเซเช‚ เชธเซŒเชฅเซ€ เชจเชพเชจเซเช‚ เชเช•เชฎ, เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‹ เชญเชพเช—, เชฅเซเชฐเซ‡เชกเซ‹ เชเช• เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ€ เช…เช‚เชฆเชฐ เชฎเซ‡เชฎเชฐเซ€ เช…เชจเซ‡ เช…เชจเซเชฏ เชธเช‚เชธเชพเชงเชจเซ‹ เชเช•เชฌเซ€เชœเชพเชฎเชพเช‚ เชตเชนเซ‡เช‚เชšเซ‡ เช›เซ‡.
เชฎเชฒเซเชŸเซ€เชŸเชพเชธเซเช•เซ€เช‚เช— - เช“เชเชธ เชชเซเชฐเซ‹เชชเชฐเซเชŸเซ€, เชเช•เชธเชพเชฅเซ‡ เช…เชจเซ‡เช• เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“ เชšเชฒเชพเชตเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ
เชฎเชฒเซเชŸเซ€-เช•เซ‹เชฐ - เชชเซเชฐเซ‹เชธเซ‡เชธเชฐเชจเซ€ เชฎเชฟเชฒเช•เชค, เชกเซ‡เชŸเชพ เชชเซเชฐเซ‹เชธเซ‡เชธเชฟเช‚เช— เชฎเชพเชŸเซ‡ เช˜เชฃเชพ เช•เซ‹เชฐเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ
เชฎเชฒเซเชŸเชฟเชชเซเชฐเซ‹เชธเซ‡เชธเชฟเช‚เช— - เช•เชฎเซเชชเซเชฏเซเชŸเชฐเชจเซ€ เชฎเชฟเชฒเช•เชค, เชถเชพเชฐเซ€เชฐเชฟเช• เชฐเซ€เชคเซ‡ เช˜เชฃเชพ เชชเซเชฐเซ‹เชธเซ‡เชธเชฐเซ‹ เชธเชพเชฅเซ‡ เชเช• เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ
เชฎเชฒเซเชŸเชฟเชฅเซเชฐเซ‡เชกเซ€เช‚เช— - เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ€ เชฎเชฟเชฒเช•เชค, เชตเชฟเชตเชฟเชง เชฅเซเชฐเซ‡เชกเซ‹ เชตเชšเซเชšเซ‡ เชกเซ‡เชŸเชพ เชชเซเชฐเซ‹เชธเซ‡เชธเชฟเช‚เช—เชจเซ‡ เชตเชฟเชคเชฐเชฟเชค เช•เชฐเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ.
เชธเชฎเชพเช‚เชคเชฐเชตเชพเชฆ - เชธเชฎเชฏเชจเชพ เชเช•เชฎ เชฆเซ€เช  เชถเชพเชฐเซ€เชฐเชฟเช• เชฐเซ€เชคเซ‡ เชเช• เชธเชพเชฅเซ‡ เช…เชจเซ‡เช• เช•เซเชฐเชฟเชฏเชพเช“ เช•เชฐเชตเซ€
เช…เชธเชฟเช‚เช•เซเชฐเซ‹เชจเซ€ - เช† เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชชเซ‚เชฐเซเชฃ เชฅเชตเชพเชจเซ€ เชฐเชพเชน เชœเซ‹เชฏเชพ เชตเชฟเชจเชพ เช‘เชชเชฐเซ‡เชถเชจเชจเซเช‚ เช…เชฎเชฒเซ€เช•เชฐเชฃ; เช…เชฎเชฒเชจเชพ เชชเชฐเชฟเชฃเชพเชฎ เชชเชฐ เชชเช›เซ€เชฅเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เชฐเซ‚เชชเช•

เชฌเชงเซ€ เชตเซเชฏเชพเช–เซเชฏเชพเช“ เชธเชพเชฐเซ€ เชจเชฅเซ€ เชนเซ‹เชคเซ€ เช…เชจเซ‡ เช•เซ‡เชŸเชฒเซ€เช•เชจเซ‡ เชตเชงเชพเชฐเชพเชจเซ€ เชธเชฎเชœเซ‚เชคเซ€เชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เช›เซ‡, เชคเซ‡เชฅเซ€ เชนเซเช‚ เช”เชชเชšเชพเชฐเชฟเช• เชฐเซ€เชคเซ‡ เชฐเชœเซ‚ เช•เชฐเชพเชฏเซ‡เชฒ เชชเชฐเชฟเชญเชพเชทเชพเชฎเชพเช‚ เชจเชพเชธเซเชคเซ‹ เชฐเชพเช‚เชงเชตเชพ เชตเชฟเชถเซ‡ เชเช• เชฐเซ‚เชชเช• เช‰เชฎเซ‡เชฐเซ€เชถ. เช† เชฐเซ‚เชชเช•เชฎเชพเช‚ เชจเชพเชธเซเชคเซ‹ เชฐเชพเช‚เชงเชตเชพ เช เชเช• เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช›เซ‡.

เชธเชตเชพเชฐเซ‡ เชจเชพเชธเซเชคเซ‹ เชฌเชจเชพเชตเชคเซ€ เชตเช–เชคเซ‡ เชนเซเช‚ (เชธเซ€.เชชเซ€.เชฏเซ) เชนเซเช‚ เชฐเชธเซ‹เชกเชพเชฎเชพเช‚ เช†เชตเซเช‚ เช›เซเช‚ (เช•เชฎเซเชชเซเชฏเซเชŸเชฐ). เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ 2 เชนเชพเชฅ เช›เซ‡ (เช•เซ‹เชฐเซ‹). เชฐเชธเซ‹เชกเชพเชฎเชพเช‚ เชธเช‚เช–เซเชฏเชพเชฌเช‚เชง เช‰เชชเช•เชฐเชฃเซ‹ เช›เซ‡ (IO): เช“เชตเชจ, เช•เซ‡เชŸเชฒ, เชŸเซ‹เชธเซเชŸเชฐ, เชฐเซ‡เชซเซเชฐเชฟเชœเชฐเซ‡เชŸเชฐ. เชนเซเช‚ เช—เซ‡เชธ เชšเชพเชฒเซ เช•เชฐเซเช‚ เช›เซเช‚, เชคเซ‡เชจเชพ เชชเชฐ เชซเซเชฐเชพเชˆเช‚เช— เชชเชพเชจ เชฎเซ‚เช•เซเช‚ เช›เซเช‚ เช…เชจเซ‡ เชคเซ‡ เช—เชฐเชฎ เชฅเชตเชพเชจเซ€ เชฐเชพเชน เชœเซ‹เชฏเชพ เชตเชฟเชจเชพ เชคเซ‡เชฎเชพเช‚ เชคเซ‡เชฒ เชฐเซ‡เชกเซเช‚ เช›เซเช‚ (เช…เชธเซเชฎเซ‡เชณ เชฐเซ€เชคเซ‡, เชฌเชฟเชจ-เช…เชตเชฐเซ‹เชงเชฟเชค-IO-เชชเซเชฐเชคเซ€เช•เซเชทเชพ), เชนเซเช‚ เช‡เช‚เชกเชพเชจเซ‡ เชฐเซ‡เชซเซเชฐเชฟเชœเชฐเซ‡เชŸเชฐเชฎเชพเช‚เชฅเซ€ เชฌเชนเชพเชฐ เช•เชพเชขเซเช‚ เช›เซเช‚ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชชเซเชฒเซ‡เชŸเชฎเชพเช‚ เชคเซ‹เชกเซ€ เชจเชพเช–เซเช‚ เช›เซเช‚, เชชเช›เซ€ เชคเซ‡เชจเซ‡ เชเช• เชนเชพเชฅเชฅเซ€ เชนเชฐเชพเชตเซเช‚ เช›เซเช‚ (เชฅเซเชฐเซ‡เชก #1), เช…เชจเซ‡ เชฌเซ€เชœเซเช‚ (เชฅเซเชฐเซ‡เชก #2) เชชเซเชฒเซ‡เชŸ เชนเซ‹เชฒเซเชกเชฟเช‚เช— (เชถเซ‡เชฐเซเชก เชฐเชฟเชธเซ‹เชฐเซเชธ). เชนเชตเซ‡ เชนเซเช‚ เช•เซ‡เชŸเชฒ เชšเชพเชฒเซ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚, เชชเชฐเช‚เชคเซ เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชชเซ‚เชฐเชคเชพ เชนเชพเชฅ เชจเชฅเซ€ (เชฅเซเชฐเซ‡เชก เชญเซ‚เช–เชฎเชฐเซ‹) เช† เชธเชฎเชฏ เชฆเชฐเชฎเชฟเชฏเชพเชจ, เชซเซเชฐเชพเชˆเช‚เช— เชชเชพเชจ เช—เชฐเชฎ เชฅเชพเชฏ เช›เซ‡ (เชชเชฐเชฟเชฃเชพเชฎ เชชเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡) เชœเซ‡เชฎเชพเช‚ เชฎเซ‡เช‚ เชœเซ‡ เชšเชพเชฌเซเช• เชฎเชพเชฐเซเชฏเซเช‚ เช›เซ‡ เชคเซ‡ เชฐเซ‡เชกเชตเซเช‚. เชนเซเช‚ เช•เซ€เชŸเชฒเซ€ เชธเซเชงเซ€ เชชเชนเซ‹เช‚เชšเซเช‚ เช›เซเช‚ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชšเชพเชฒเซ เช•เชฐเซเช‚ เช›เซเช‚ เช…เชจเซ‡ เชฎเซ‚เชฐเซเช–เชคเชพเชชเซ‚เชฐเซเชตเช• เชคเซ‡เชฎเชพเช‚ เชชเชพเชฃเซ€ เช‰เช•เชณเชคเซเช‚ เชœเซ‹เช‰เช‚ เช›เซเช‚ (เช…เชตเชฐเซ‹เชงเชฟเชค-IO-เชชเซเชฐเชคเซ€เช•เซเชทเชพ), เชœเซ‹ เช•เซ‡ เช† เชธเชฎเชฏ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชคเซ‡ เชœเซเชฏเชพเช‚ เช“เชฎเซ‡เชฒเซ‡เชŸ เชšเชพเชฌเซเช• เชฎเชพเชฐเชคเซ‹ เชนเชคเซ‹ เชคเซ‡ เชชเซเชฒเซ‡เชŸ เชงเซ‹เชˆ เชถเช•เชคเซ‹ เชนเชคเซ‹.

เชฎเซ‡เช‚ เชซเช•เซเชค 2 เชนเชพเชฅเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช“เชฎเซ‡เชฒเซ‡เชŸ เชฐเชพเช‚เชงเซเชฏเซเช‚, เช…เชจเซ‡ เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชตเชงเซ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชคเซ‡ เชœ เชธเชฎเชฏเซ‡, เช“เชฎเซ‡เชฒเซ‡เชŸเชจเซ‡ เชšเชพเชฌเซเช• เชฎเชพเชฐเชตเชพเชจเซ€ เช•เซเชทเชฃเซ‡, เชเช• เชธเชพเชฅเซ‡ 3 เช“เชชเชฐเซ‡เชถเชจ เชฅเชฏเชพ: เช“เชฎเซ‡เชฒเซ‡เชŸเชจเซ‡ เชšเชพเชฌเซเช• เชฎเชพเชฐเชตเซ€, เชชเซเชฒเซ‡เชŸ เชชเช•เชกเชตเซ€, เชซเซเชฐเชพเชˆเช‚เช— เชชเชพเชจ เช—เชฐเชฎ เช•เชฐเชตเซ€ CPU เช เช•เซ‹เชฎเซเชชเซเชฏเซเชŸเชฐเชจเซ‹ เชธเซŒเชฅเซ€ เชเชกเชชเซ€ เชญเชพเช— เช›เซ‡, IO เช เช›เซ‡ เชœเซ‡ เชฎเซ‹เชŸเชพเชญเชพเช—เซ‡ เชฌเชงเซเช‚ เชงเซ€เชฎเซเช‚ เชชเชกเซ€ เชœเชพเชฏ เช›เซ‡, เชคเซ‡เชฅเซ€ เช˜เชฃเซ€ เชตเช–เชค เช…เชธเชฐเช•เชพเชฐเช• เช‰เช•เซ‡เชฒ เช เช›เซ‡ เช•เซ‡ IO เชฎเชพเช‚เชฅเซ€ เชกเซ‡เชŸเชพ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ CPU เชจเซ‡ เช•เช‚เชˆเช• เชธเชพเชฅเซ‡ เช•เชฌเชœเซ‡ เช•เชฐเชตเซเช‚.

เชฐเซ‚เชชเช• เชšเชพเชฒเซ เชฐเชพเช–เชตเซเช‚:

  • เชœเซ‹ เช†เชฎเชฒเซ‡เชŸ เชคเซˆเชฏเชพเชฐ เช•เชฐเชตเชพเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชฎเชพเช‚, เชนเซเช‚ เช•เชชเชกเชพเช‚ เชฌเชฆเชฒเชตเชพเชจเซ‹ เชชเชฃ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เชถ, เชคเซ‹ เช† เชฎเชฒเซเชŸเชฟเชŸเชพเชธเซเช•เชฟเช‚เช—เชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ เชนเชถเซ‡. เชเช• เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เชธเซ‚เช•เซเชทเซเชฎเชคเชพ: เช•เชฎเซเชชเซเชฏเซเชŸเชฐเซเชธ เช†เชฎเชพเช‚ เชฒเซ‹เช•เซ‹ เช•เชฐเชคเชพเช‚ เชตเชงเซ เชธเชพเชฐเชพ เช›เซ‡.
  • เช˜เชฃเชพ เชฐเชธเซ‹เช‡เชฏเชพเช“ เชธเชพเชฅเซ‡เชจเซเช‚ เชฐเชธเซ‹เชกเซเช‚, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เชฐเซ‡เชธเซเชŸเซ‹เชฐเชจเซเชŸเชฎเชพเช‚ - เชฎเชฒเซเชŸเชฟ-เช•เซ‹เชฐ เช•เชฎเซเชชเซเชฏเซเชŸเชฐ.
  • เชถเซ‹เชชเชฟเช‚เช— เชธเซ‡เชจเซเชŸเชฐเชฎเชพเช‚ เชซเซ‚เชก เช•เซ‹เชฐเซเชŸเชฎเชพเช‚ เช˜เชฃเซ€ เชฐเซ‡เชธเซเชŸเซ‹เชฐเชพเช‚ - เชกเซ‡เชŸเชพ เชธเซ‡เชจเซเชŸเชฐ

.NET เชธเชพเชงเชจเซ‹

.NET เช…เชจเซเชฏ เช˜เชฃเซ€ เชตเชธเซเชคเซเช“เชจเซ€ เชœเซ‡เชฎ เชฅเซเชฐเซ‡เชกเซ‹ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชฎเชพเช‚ เชธเชพเชฐเซเช‚ เช›เซ‡. เชฆเชฐเซ‡เช• เชจเชตเชพ เชธเช‚เชธเซเช•เชฐเชฃ เชธเชพเชฅเซ‡, เชคเซ‡ เชคเซ‡เชฎเชจเซ€ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชตเชงเซ เช…เชจเซ‡ เชตเชงเซ เชจเชตเชพ เชธเชพเชงเชจเซ‹ เชฐเชœเซ‚ เช•เชฐเซ‡ เช›เซ‡, OS เชฅเซเชฐเซ‡เชกเซ‹ เชชเชฐ เช…เชฎเซ‚เชฐเซเชคเชคเชพเชจเชพ เชจเชตเชพ เชธเซเชคเชฐเซ‹. เชเชฌเซเชธเซเชŸเซเชฐเซ‡เช•เซเชถเชจเชจเชพ เชจเชฟเชฐเซเชฎเชพเชฃ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡, เชซเซเชฐเซ‡เชฎเชตเชฐเซเช• เชกเซ‡เชตเชฒเชชเชฐเซเชธ เชเชตเชพ เช…เชญเชฟเช—เชฎเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ เชœเซ‡ เชคเช•เชจเซ‡ เช›เซ‹เชกเซ‡ เช›เซ‡, เชœเซเชฏเชพเชฐเซ‡ เช‰เชšเซเชš-เชธเซเชคเชฐเชจเชพ เชเชฌเซเชธเซเชŸเซเชฐเซ‡เช•เซเชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เชเช• เช…เชฅเชตเชพ เชตเชงเซ เชธเซเชคเชฐเซ‹ เชจเซ€เชšเซ‡ เชœเชตเชพ เชฎเชพเชŸเซ‡. เชฎเซ‹เชŸเซ‡เชญเชพเช—เซ‡ เช† เชœเชฐเซ‚เชฐเซ€ เชจเชฅเซ€, เชนเช•เซ€เช•เชคเชฎเชพเช‚ เชคเซ‡ เชถเซ‹เชŸเช—เชจ เชตเชกเซ‡ เชชเซ‹เชคเชพเชจเซ‡ เชชเช—เชฎเชพเช‚ เช—เซ‹เชณเซ€เชฌเชพเชฐ เช•เชฐเชตเชพเชจเซ‹ เชฆเชฐเชตเชพเชœเซ‹ เช–เซ‹เชฒเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ, เชญเชพเช—เซเชฏเซ‡ เชœ เช•เชฟเชธเซเชธเชพเช“เชฎเชพเช‚, เชคเซ‡ เชธเชฎเชธเซเชฏเชพเชจเซ‡ เชนเชฒ เช•เชฐเชตเชพเชจเซ‹ เชเช•เชฎเชพเชคเซเชฐ เชฐเชธเซเชคเซ‹ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ เชœเซ‡ เชตเชฐเซเชคเชฎเชพเชจ เช…เชฎเซ‚เชฐเซเชคเชคเชพเชจเชพ เชธเซเชคเชฐเซ‡ เช‰เช•เซ‡เชฒเซ€ เชถเช•เชพเชคเซ€ เชจเชฅเซ€. .

เชŸเซ‚เชฒเซเชธ เชฆเซเชตเชพเชฐเชพ, เชฎเชพเชฐเซ‹ เชฎเชคเชฒเชฌ เชซเซเชฐเซ‡เชฎเชตเชฐเซเช• เช…เชจเซ‡ เชคเซƒเชคเซ€เชฏ-เชชเช•เซเชท เชชเซ‡เช•เซ‡เชœเซ‹ เชฆเซเชตเชพเชฐเชพ เชชเซ‚เชฐเชพ เชชเชพเชกเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เช‡เชจเซเชŸเชฐเชซเซ‡เชธ (APIs), เชคเซ‡เชฎเชœ เชธเชฎเช—เซเชฐ เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ เชธเซ‹เชฒเซเชฏเซเชถเชจเซเชธ เช•เซ‡ เชœเซ‡ เชฎเชฒเซเชŸเซ€-เชฅเซเชฐเซ‡เชกเซ‡เชก เช•เซ‹เชกเชจเซ‡ เชฒเช—เชคเซ€ เช•เซ‹เชˆเชชเชฃ เชธเชฎเชธเซเชฏเชพเช“ เชฎเชพเชŸเซ‡ เชถเซ‹เชงเชจเซ‡ เชธเชฐเชณ เชฌเชจเชพเชตเซ‡ เช›เซ‡.

เชเช• เชฅเซเชฐเซ‡เชก เชถเชฐเซ‚ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

เชฅเซเชฐเซ‡เชก เช•เซเชฒเชพเชธ .NET เชฎเชพเช‚ เชฅเซเชฐเซ‡เชกเซ‹ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ‹ เชธเซŒเชฅเซ€ เชฎเซ‚เชณเชญเซ‚เชค เชตเชฐเซเช— เช›เซ‡. เช•เชจเซเชธเซเชŸเซเชฐเช•เซเชŸเชฐ เชฌเซ‡เชฎเชพเช‚เชฅเซ€ เชเช• เชชเซเชฐเชคเชฟเชจเชฟเชงเชฟ เชธเซเชตเซ€เช•เชพเชฐเซ‡ เช›เซ‡:

  • เชฅเซเชฐเซ‡เชกเชธเซเชŸเชพเชฐเซเชŸ - เช•เซ‹เชˆ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชจเชฅเซ€
  • ParametrizedThreadStart - เชชเซเชฐเช•เชพเชฐ เช“เชฌเซเชœเซ‡เช•เซเชŸเชจเชพ เชเช• เชชเชฐเชฟเชฎเชพเชฃ เชธเชพเชฅเซ‡.

เชธเซเชŸเชพเชฐเซเชŸ เชฎเซ‡เชฅเชกเชจเซ‡ เช•เซ‰เชฒ เช•เชฐเซเชฏเชพ เชชเช›เซ€ เชกเซ‡เชฒเชฟเช—เซ‡เชŸเชจเซ‡ เชจเชตเชพ เชฌเชจเชพเชตเซ‡เชฒเชพ เชฅเซเชฐเซ‡เชกเชฎเชพเช‚ เชเช•เซเชเชฟเช•เซเชฏเซเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เชœเซ‹ ParametrizedThreadStart เชชเซเชฐเช•เชพเชฐเชจเซเช‚ เชชเซเชฐเชคเชฟเชจเชฟเชงเชฟ เช•เชจเซเชธเซเชŸเซเชฐเช•เซเชŸเชฐเชจเซ‡ เชชเชพเชธ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเซ‹เชฏ, เชคเซ‹ เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชธเซเชŸเชพเชฐเซเชŸ เชฎเซ‡เชฅเชกเชฎเชพเช‚ เชชเชพเชธ เชฅเชตเซ‹ เชœเซ‹เชˆเช. เช•เซ‹เชˆเชชเชฃ เชธเซเชฅเชพเชจเชฟเช• เชฎเชพเชนเชฟเชคเซ€เชจเซ‡ เชธเซเชŸเซเชฐเซ€เชฎเชฎเชพเช‚ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช† เชชเชฆเซเชงเชคเชฟ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡. เชคเซ‡ เชจเซ‹เช‚เชงเชตเซเช‚ เชฏเซ‹เช—เซเชฏ เช›เซ‡ เช•เซ‡ เชฅเซเชฐเซ‡เชก เชฌเชจเชพเชตเชตเซ€ เช เชเช• เช–เชฐเซเชšเชพเชณ เช•เชพเชฎเช—เซ€เชฐเซ€ เช›เซ‡, เช…เชจเซ‡ เชฅเซเชฐเซ‡เชก เชชเซ‹เชคเซ‡ เชเช• เชญเชพเชฐเซ‡ เชชเชฆเชพเชฐเซเชฅ เช›เซ‡, เช“เช›เชพเชฎเชพเช‚ เช“เช›เซเช‚ เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡ เชธเซเชŸเซ‡เช• เชชเชฐ 1MB เชฎเซ‡เชฎเชฐเซ€ เชซเชพเชณเชตเซ‡ เช›เซ‡ เช…เชจเซ‡ OS API เชธเชพเชฅเซ‡ เช•เซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

new Thread(...).Start(...);

เชฅเซเชฐเซ‡เชกเชชเซเชฒ เชตเชฐเซเช— เชชเซ‚เชฒเชจเชพ เช–เซเชฏเชพเชฒเชจเซ‡ เชฐเชœเซ‚ เช•เชฐเซ‡ เช›เซ‡. .NET เชฎเชพเช‚, เชฅเซเชฐเซ‡เชก เชชเซ‚เชฒ เช เชเชจเซเชœเชฟเชจเชฟเชฏเชฐเชฟเช‚เช—เชจเซ‹ เชเช• เชญเชพเช— เช›เซ‡, เช…เชจเซ‡ เชฎเชพเช‡เช•เซเชฐเซ‹เชธเซ‹เชซเซเชŸเชจเชพ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“เช เชคเซ‡ เชธเซเชจเชฟเชถเซเชšเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช˜เชฃเชพ เชชเซเชฐเชฏเชคเซเชจเซ‹ เช•เชฐเซเชฏเชพ เช›เซ‡ เช•เซ‡ เชคเซ‡ เชตเชฟเชตเชฟเชง เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเช“เชฎเชพเช‚ เชถเซเชฐเซ‡เชทเซเช  เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡.

เชธเชพเชฎเชพเชจเซเชฏ เช–เซเชฏเชพเชฒ:

เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชถเชฐเซ‚ เชฅเชพเชฏ เชคเซ‡ เช•เซเชทเชฃเชฅเซ€, เชคเซ‡ เชชเซƒเชทเซเช เชญเซ‚เชฎเชฟเชฎเชพเช‚ เช…เชจเชพเชฎเชคเชฎเชพเช‚ เช˜เชฃเชพ เชฅเซเชฐเซ‡เชกเซ‹ เชฌเชจเชพเชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ‡ เช‰เชชเชฏเซ‹เช— เชฎเชพเชŸเซ‡ เชฒเชˆ เชœเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡. เชœเซ‹ เชฅเซเชฐเซ‡เชกเซ‹เชจเซ‹ เชตเชพเชฐเช‚เชตเชพเชฐ เช…เชจเซ‡ เชฎเซ‹เชŸเซ€ เชธเช‚เช–เซเชฏเชพเชฎเชพเช‚ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชคเซ‹ เชชเซ‚เชฒ เช•เซ‹เชฒเชฐเชจเซ€ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชคเซ‹เชจเซ‡ เชชเชนเซ‹เช‚เชšเซ€ เชตเชณเชตเชพ เชตเชฟเชธเซเชคเชฐเซ‡ เช›เซ‡. เชœเซเชฏเชพเชฐเซ‡ เชฏเซ‹เช—เซเชฏ เชธเชฎเชฏเซ‡ เชชเซ‚เชฒเชฎเชพเช‚ เช•เซ‹เชˆ เชฎเซเช•เซเชค เชฅเซเชฐเซ‡เชกเซ‹ เชจ เชนเซ‹เชฏ, เชคเซเชฏเชพเชฐเซ‡ เชคเซ‡ เช•เชพเช‚ เชคเซ‹ เชเช• เชฅเซเชฐเซ‡เชกเซ‹เชจเชพ เชชเชพเช›เชพ เช†เชตเชตเชพเชจเซ€ เชฐเชพเชน เชœเซ‹เชถเซ‡ เช…เชฅเชตเชพ เชเช• เชจเชตเซ‹ เชฌเชจเชพเชตเชถเซ‡. เชคเซ‡ เช…เชจเซเชธเชฐเซ‡ เช›เซ‡ เช•เซ‡ เชฅเซเชฐเซ‡เชก เชชเซ‚เชฒ เช•เซ‡เชŸเชฒเซ€เช• เชŸเซ‚เช‚เช•เชพ เช—เชพเชณเชพเชจเซ€ เช•เซเชฐเชฟเชฏเชพเช“ เชฎเชพเชŸเซ‡ เช‰เชคเซเชคเชฎ เช›เซ‡ เช…เชจเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเชพ เชธเชฎเช—เซเชฐ เช“เชชเชฐเซ‡เชถเชจ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชธเซ‡เชตเชพเช“ เชคเชฐเซ€เช•เซ‡ เชšเชพเชฒเชคเซ€ เช•เชพเชฎเช—เซ€เชฐเซ€ เชฎเชพเชŸเซ‡ เช–เชฐเชพเชฌ เชฐเซ€เชคเซ‡ เช…เชจเซเช•เซ‚เชณ เช›เซ‡.

เชชเซ‚เชฒเชฎเชพเช‚เชฅเซ€ เชฅเซเชฐเซ‡เชกเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเซเชฏเชพเช‚ เชเช• QueueUserWorkItem เชชเชฆเซเชงเชคเชฟ เช›เซ‡ เชœเซ‡ WaitCallback เชชเซเชฐเช•เชพเชฐเชจเชพ เชชเซเชฐเชคเชฟเชจเชฟเชงเชฟเชจเซ‡ เชธเซเชตเซ€เช•เชพเชฐเซ‡ เช›เซ‡, เชœเซ‡ ParametrizedThreadStart เชœเซ‡เชตเซ€ เชœ เชธเชนเซ€ เชงเชฐเชพเชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชชเชธเชพเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เชชเชฐเชฟเชฎเชพเชฃ เชธเชฎเชพเชจ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡.

ThreadPool.QueueUserWorkItem(...);

เช“เช›เซ€ เชœเชพเชฃเซ€เชคเซ€ เชฅเซเชฐเซ‡เชก เชชเซ‚เชฒ เชชเชฆเซเชงเชคเชฟ RegisterWaitForSingleObject เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฌเชฟเชจ-เช…เชตเชฐเซ‹เชงเชฟเชค IO เช•เชพเชฎเช—เซ€เชฐเซ€เชจเซ‡ เช—เซ‹เช เชตเชตเชพ เชฎเชพเชŸเซ‡ เชฅเชพเชฏ เช›เซ‡. เชœเซเชฏเชพเชฐเซ‡ เชตเซ‡เช‡เชŸเชนเซ‡เชจเซเชกเชฒ เชชเชฆเซเชงเชคเชฟเชจเซ‡ เชชเชธเชพเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชคเซเชฏเชพเชฐเซ‡ เช† เชชเชฆเซเชงเชคเชฟเชฎเชพเช‚ เชชเชธเชพเชฐ เช•เชฐเชพเชฏเซ‡เชฒ เชชเซเชฐเชคเชฟเชจเชฟเชงเชฟเชจเซ‡ เช•เชนเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

ThreadPool.RegisterWaitForSingleObject(...)

.NET เชชเชพเชธเซ‡ เชฅเซเชฐเซ‡เชก เชŸเชพเชˆเชฎเชฐ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡ WinForms/WPF เชŸเชพเชˆเชฎเชฐเชฅเซ€ เช…เชฒเช— เช›เซ‡ เช•เซ‡ เชคเซ‡เชจเชพ เชนเซ‡เชจเซเชกเชฒเชฐเชจเซ‡ เชชเซ‚เชฒเชฎเชพเช‚เชฅเซ€ เชฒเซ€เชงเซ‡เชฒเชพ เชฅเซเชฐเซ‡เชก เชชเชฐ เชฌเซ‹เชฒเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

System.Threading.Timer

เชชเซ‚เชฒเชฎเชพเช‚เชฅเซ€ เชฅเซเชฐเซ‡เชก เชชเชฐ เชเช•เซเชเซ‡เช•เซเชฏเซเชถเชจ เชฎเชพเชŸเซ‡ เชชเซเชฐเชคเชฟเชจเชฟเชงเชฟ เชฎเซ‹เช•เชฒเชตเชพเชจเซ€ เชเช• เชตเชฟเชšเชฟเชคเซเชฐ เชฐเซ€เชค เชชเชฃ เช›เซ‡ - BeginInvoke เชชเชฆเซเชงเชคเชฟ.

DelegateInstance.BeginInvoke

เชนเซเช‚ เชธเช‚เช•เซเชทเชฟเชชเซเชคเชฎเชพเช‚ เชคเซ‡ เช•เชพเชฐเซเชฏ เชชเชฐ เชงเซเชฏเชพเชจ เช†เชชเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚ เช•เซ‡ เชœเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เช‰เชชเชฐเชจเซ€ เช˜เชฃเซ€ เชชเชฆเซเชงเชคเชฟเช“ เช•เชนเซ€ เชถเช•เชพเชฏ - Kernel32.dll Win32 API เชฅเซ€ CreateThread. เช† เช•เชพเชฐเซเชฏเชจเซ‡ เช•เซ‰เชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชฌเชพเชนเซเชฏ เชชเชฆเซเชงเชคเชฟเช“เชจเชพ เชฎเชฟเช•เซ‡เชจเชฟเชเชฎเชจเซ‡ เช†เชญเชพเชฐเซ€ เชเช• เชฎเชพเชฐเซเช— เช›เซ‡. เชฎเซ‡เช‚ เชฒเซ‡เช—เชธเซ€ เช•เซ‹เชกเชจเชพ เชญเชฏเช‚เช•เชฐ เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚ เชซเช•เซเชค เชเช• เชœ เชตเชพเชฐ เช†เชตเซ‹ เช•เซ‰เชฒ เชœเซ‹เชฏเซ‹ เช›เซ‡, เช…เชจเซ‡ เชฒเซ‡เช–เช•เชจเซ€ เชชเซเชฐเซ‡เชฐเชฃเชพ เชœเซ‡เชฃเซ‡ เช† เชฌเชฐเชพเชฌเชฐ เช•เชฐเซเชฏเซเช‚ เชคเซ‡ เชนเชœเซ€ เชชเชฃ เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชเช• เชฐเชนเชธเซเชฏ เช›เซ‡.

Kernel32.dll CreateThread

เชฅเซเชฐเซ‡เชกเซ‹ เชœเซ‹เชตเชพ เช…เชจเซ‡ เชกเซ€เชฌเช—เซ€เช‚เช—

เชคเชฎเชพเชฐเชพ เชฆเซเชตเชพเชฐเชพ เชฌเชจเชพเชตเซ‡เชฒ เชฅเซเชฐเซ‡เชกเซ‹, เชฌเชงเชพ เชคเซƒเชคเซ€เชฏ-เชชเช•เซเชท เช˜เชŸเช•เซ‹ เช…เชจเซ‡ .NET เชชเซ‚เชฒ เชตเชฟเชเซเชฏเซเช…เชฒ เชธเซเชŸเซเชกเชฟเชฏเซ‹เชจเซ€ เชฅเซเชฐเซ‡เชกเซเชธ เชตเชฟเช‚เชกเซ‹เชฎเชพเช‚ เชœเซ‹เชˆ เชถเช•เชพเชฏ เช›เซ‡. เชœเซเชฏเชพเชฐเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชกเซ€เชฌเช— เชนเซ‡เช เชณ เชนเซ‹เชฏ เช…เชจเซ‡ เชฌเซเชฐเซ‡เช• เชฎเซ‹เชกเชฎเชพเช‚ เชนเซ‹เชฏ เชคเซเชฏเชพเชฐเซ‡ เชœ เช† เชตเชฟเชจเซเชกเซ‹ เชฅเซเชฐเซ‡เชก เชฎเชพเชนเชฟเชคเซ€ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชถเซ‡. เช…เชนเซ€เช‚ เชคเชฎเซ‡ เชฆเชฐเซ‡เช• เชฅเซเชฐเซ‡เชกเชจเชพ เชธเซเชŸเซ‡เช• เชจเชพเชฎเซ‹ เช…เชจเซ‡ เชชเซเชฐเชพเชฅเชฎเชฟเช•เชคเชพเช“เชจเซ‡ เชธเชนเซ‡เชฒเชพเช‡เชฅเซ€ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹ เช…เชจเซ‡ เชกเชฟเชฌเช—เซ€เช‚เช—เชจเซ‡ เชšเซ‹เช•เซเช•เชธ เชฅเซเชฐเซ‡เชก เชชเชฐ เชธเซเชตเชฟเชš เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. เชฅเซเชฐเซ‡เชก เชตเชฐเซเช—เชจเซ€ เชชเซเชฐเชพเชงเชพเชจเซเชฏเชคเชพ เช—เซเชฃเชงเชฐเซเชฎเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡, เชคเชฎเซ‡ เชฅเซเชฐเซ‡เชกเชจเซ€ เชชเซเชฐเชพเชงเชพเชจเซเชฏเชคเชพ เชธเซ‡เชŸ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชœเซ‡เชจเซ‡ OC เช…เชจเซ‡ CLR เชœเซเชฏเชพเชฐเซ‡ เชฅเซเชฐเซ‡เชกเซ‹ เชตเชšเซเชšเซ‡ เชชเซเชฐเซ‹เชธเซ‡เชธเชฐเชจเซ‹ เชธเชฎเชฏ เชตเชฟเชญเชพเชœเชฟเชค เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชญเชฒเชพเชฎเชฃ เชคเชฐเซ€เช•เซ‡ เชธเชฎเชœเชถเซ‡.

.NET: เชฎเชฒเซเชŸเชฟเชฅเซเชฐเซ‡เชกเซ€เช‚เช— เช…เชจเซ‡ เช…เชธเชฟเช‚เช•เซเชฐเซ‹เชจเซ€ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เชธเชพเชงเชจเซ‹. เชญเชพเช— 1

เช•เชพเชฐเซเชฏ เชธเชฎเชพเช‚เชคเชฐ เชชเซเชธเซเชคเช•เชพเชฒเชฏ

เชŸเชพเชธเซเช• เชชเซ‡เชฐเซ‡เชฒเชฒ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€ (TPL) .NET 4.0 เชฎเชพเช‚ เชฐเชœเซ‚ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€. เชนเชตเซ‡ เชคเซ‡ เช…เชธเชฟเช‚เช•เซเชฐเซ‹เชจเซ€ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซเช‚ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เช…เชจเซ‡ เชฎเซเช–เซเชฏ เชธเชพเชงเชจ เช›เซ‡. เช•เซ‹เชˆเชชเชฃ เช•เซ‹เชก เช•เซ‡ เชœเซ‡ เชœเซ‚เชจเชพ เช…เชญเชฟเช—เชฎเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡เชจเซ‡ เชตเชพเชฐเชธเซ‹ เช—เชฃเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. TPL เชจเซเช‚ เชฎเซ‚เชณเชญเซ‚เชค เชเช•เชฎ System.Threading.Tasks เชจเซ‡เชฎเชธเซเชชเซ‡เชธเชฎเชพเช‚เชฅเซ€ เช•เชพเชฐเซเชฏ เชตเชฐเซเช— เช›เซ‡. เช•เชพเชฐเซเชฏ เช เชฅเซเชฐเซ‡เชก เชชเชฐเชจเซเช‚ เช…เชฎเซ‚เชฐเซเชค เช›เซ‡. C# เชญเชพเชทเชพเชจเชพ เชจเชตเชพ เชธเช‚เชธเซเช•เชฐเชฃ เชธเชพเชฅเซ‡, เช…เชฎเชจเซ‡ Tasks - async/await operators เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซ€ เชเช• เชญเชตเซเชฏ เชฐเซ€เชค เชฎเชณเซ€ เช›เซ‡. เช† เชตเชฟเชญเชพเชตเชจเชพเช“เช เช…เชธเซเชฎเซ‡เชณ เช•เซ‹เชก เชฒเช–เชตเชพเชจเซเช‚ เชถเช•เซเชฏ เชฌเชจเชพเชตเซเชฏเซเช‚ เชœเชพเชฃเซ‡ เช•เซ‡ เชคเซ‡ เชธเชฐเชณ เช…เชจเซ‡ เชธเชฟเช‚เช•เซเชฐเชจเชธ เชนเซ‹เชฏ, เช†เชจเชพเชฅเซ€ เชฅเซเชฐเซ‡เชกเซ‹เชจเซ€ เช†เช‚เชคเชฐเชฟเช• เช•เชพเชฎเช—เซ€เชฐเซ€เชจเซ€ เช“เช›เซ€ เชธเชฎเชœ เชงเชฐเชพเชตเชคเชพ เชฒเซ‹เช•เซ‹ เชฎเชพเชŸเซ‡ เชชเชฃ เชคเซ‡ เชถเช•เซเชฏ เชฌเชจเซเชฏเซเช‚ เช•เซ‡ เชคเซ‡เช“ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชคเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‹ เชฒเช–เซ€ เชถเช•เซ‡, เชฒเชพเช‚เชฌเซ€ เช•เชพเชฎเช—เซ€เชฐเซ€ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชธเซเชฅเชฟเชฐ เชฅเชคเซ€ เชจ เชนเซ‹เชฏ เชคเซ‡เชตเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‹. async/await เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช เชเช• เช…เชฅเชตเชพ เชคเซ‹ เช˜เชฃเชพ เชฒเซ‡เช–เซ‹ เชฎเชพเชŸเซ‡เชจเซ‹ เชตเชฟเชทเชฏ เช›เซ‡, เชชเชฐเช‚เชคเซ เชนเซเช‚ เชฅเซ‹เชกเชพ เชตเชพเช•เซเชฏเซ‹เชฎเชพเช‚ เชคเซ‡เชจเซ‹ เชธเชพเชฐเชพเช‚เชถ เชฎเซ‡เชณเชตเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เชถ:

  • async เช เช•เชพเชฐเซเชฏ เช…เชฅเชตเชพ เชฐเชฆเชฌเชพเชคเชฒ เชชเชฐเชค เช•เชฐเชคเซ€ เชชเชฆเซเชงเชคเชฟเชจเซเช‚ เชฎเซ‹เชกเชฟเชซเชพเชฏเชฐ เช›เซ‡
  • เช…เชจเซ‡ await เช เชจเซ‹เชจ-เชฌเซเชฒเซ‹เช•เซ€เช‚เช— เชŸเชพเชธเซเช• เชตเซ‡เชˆเชŸเซ€เช‚เช— เช“เชชเชฐเซ‡เชŸเชฐ เช›เซ‡.

เชซเชฐเซ€ เชเช•เชตเชพเชฐ: เชชเซเชฐเชคเซ€เช•เซเชทเชพ เช“เชชเชฐเซ‡เชŸเชฐ, เชธเชพเชฎเชพเชจเซเชฏ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ (เชคเซเชฏเชพเช‚ เช…เชชเชตเชพเชฆเซ‹ เช›เซ‡), เช…เชฎเชฒเชจเชพ เชตเชฐเซเชคเชฎเชพเชจ เชฅเซเชฐเซ‡เชกเชจเซ‡ เชตเชงเซ เชฌเชนเชพเชฐ เชชเชพเชกเชถเซ‡, เช…เชจเซ‡ เชœเซเชฏเชพเชฐเซ‡ เช•เชพเชฐเซเชฏ เชคเซ‡เชจเชพ เช…เชฎเชฒเชจเซ‡ เชชเซ‚เชฐเซเชฃ เช•เชฐเชถเซ‡, เช…เชจเซ‡ เชฅเซเชฐเซ‡เชก (เชนเช•เซ€เช•เชคเชฎเชพเช‚, เชธเช‚เชฆเชฐเซเชญ เช•เชนเซ‡เชตเซเช‚ เชตเชงเซ เชฏเซ‹เช—เซเชฏ เชฐเชนเซ‡เชถเซ‡. , เชชเชฐเช‚เชคเซ เชคเซ‡เชจเชพ เชชเชฐ เชชเช›เซ€เชฅเซ€ เชตเชงเซ) เชชเชฆเซเชงเชคเชฟเชจเซ‡ เช†เช—เชณ เชšเชฒเชพเชตเชตเชพเชจเซเช‚ เชšเชพเชฒเซ เชฐเชพเช–เชถเซ‡. .NET เชจเซ€ เช…เช‚เชฆเชฐ, เช† เชฎเชฟเช•เซ‡เชจเชฟเชเชฎ เชฏเซ€เชฒเซเชก เชฐเชฟเชŸเชฐเซเชจเชจเซ€ เชœเซ‡เชฎ เชœ เชฒเชพเช—เซ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชœเซเชฏเชพเชฐเซ‡ เชฒเซ‡เช–เชฟเชค เชชเชฆเซเชงเชคเชฟ เชธเช‚เชชเซ‚เชฐเซเชฃ เชตเชฐเซเช—เชฎเชพเช‚ เชซเซ‡เชฐเชตเชพเชฏ เช›เซ‡, เชœเซ‡ เชเช• เชฐเชพเชœเซเชฏ เชฎเชถเซ€เชจ เช›เซ‡ เช…เชจเซ‡ เช† เชฐเชพเชœเซเชฏเซ‹เชจเชพ เช†เชงเชพเชฐเซ‡ เช…เชฒเช— เชŸเซเช•เชกเชพเช“เชฎเชพเช‚ เช…เชฎเชฒ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชฐเชธ เชงเชฐเชพเชตเชคเซ€ เช•เซ‹เชˆเชชเชฃ เชตเซเชฏเช•เซเชคเชฟ asynั/await เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เซ‹เชˆเชชเชฃ เชธเชฐเชณ เช•เซ‹เชก เชฒเช–เซ€ เชถเช•เซ‡ เช›เซ‡, เช•เชฎเซเชชเชพเชˆเชฒเชฐ เชœเชจเชฐเซ‡เชŸเซ‡เชก เช•เซ‹เชก เชธเช•เซเชทเชฎ เชธเชพเชฅเซ‡ JetBrains dotPeek เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชเชธเซ‡เชฎเซเชฌเชฒเซ€เชจเซ‡ เช•เชฎเซเชชเชพเชˆเชฒ เช…เชจเซ‡ เชœเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡.

เชšเชพเชฒเซ‹ เชŸเชพเชธเซเช•เชจเซ‡ เชฒเซ‹เชจเซเชš เช•เชฐเชตเชพ เช…เชจเซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เชตเชฟเช•เชฒเซเชชเซ‹ เชœเซ‹เชˆเช. เชจเซ€เชšเซ‡เชจเชพ เช•เซ‹เชก เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚, เช…เชฎเซ‡ เชเช• เชจเชตเซเช‚ เช•เชพเชฐเซเชฏ เชฌเชจเชพเชตเซ€เช เช›เซ€เช เชœเซ‡ เช•เช‚เชˆเชชเชฃ เช‰เชชเชฏเซ‹เช—เซ€ เชจเชฅเซ€ (เชฅเซเชฐเซ‡เชก.เชธเซเชฒเซ€เชช(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
}

เชเช• เช•เชพเชฐเซเชฏ เชธเช‚เช–เซเชฏเชพเชฌเช‚เชง เชตเชฟเช•เชฒเซเชชเซ‹ เชธเชพเชฅเซ‡ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡:

  • เชฒเซ‹เช‚เช—เชฐเชจเชฟเช‚เช— เช เชเช• เชธเช‚เช•เซ‡เชค เช›เซ‡ เช•เซ‡ เช•เชพเชฐเซเชฏ เชเชกเชชเชฅเซ€ เชชเซ‚เชฐเซเชฃ เชฅเชถเซ‡ เชจเชนเซ€เช‚, เชœเซ‡เชจเซ‹ เช…เชฐเซเชฅ เช›เซ‡ เช•เซ‡ เชชเซ‚เชฒเชฎเชพเช‚เชฅเซ€ เชฅเซเชฐเซ‡เชก เชจ เชฒเซ‡เชตเชพเชจเซเช‚ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ‡เชตเซเช‚ เชฏเซ‹เช—เซเชฏ เช›เซ‡, เชชเชฐเช‚เชคเซ เช† เช•เชพเชฐเซเชฏ เชฎเชพเชŸเซ‡ เชเช• เช…เชฒเช— เชฌเชจเชพเชตเชตเซเช‚ เชœเซ‡เชฅเซ€ เช•เชฐเซ€เชจเซ‡ เช…เชจเซเชฏเชจเซ‡ เชจเซเช•เชธเชพเชจ เชจ เชฅเชพเชฏ.
  • AttachedToParent - เช•เชพเชฐเซเชฏเซ‹เชจเซ‡ เชชเชฆเชพเชจเซเช•เซเชฐเชฎเชฎเชพเช‚ เช—เซ‹เช เชตเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชœเซ‹ เช† เชตเชฟเช•เชฒเซเชชเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเซ‹เชฏ, เชคเซ‹ เช•เชพเชฐเซเชฏ เชเชตเซ€ เชธเซเชฅเชฟเชคเชฟเชฎเชพเช‚ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ เชœเซเชฏเชพเช‚ เชคเซ‡เชฃเซ‡ เชชเซ‹เชคเซ‡ เชชเซ‚เชฐเซเชฃ เช•เชฐเซเชฏเซเช‚ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเชพ เชฌเชพเชณเช•เซ‹เชจเชพ เช…เชฎเชฒเชจเซ€ เชฐเชพเชน เชœเซ‹เชˆ เชฐเชนเซเชฏเซเช‚ เช›เซ‡.
  • PreferFairness - เชเชจเซ‹ เช…เชฐเซเชฅ เช เช›เซ‡ เช•เซ‡ เช…เชฎเชฒ เชฎเชพเชŸเซ‡ เชฎเซ‹เช•เชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เชŸเชพเชธเซเช•เชจเซ‡ เชชเชพเช›เชณเชฅเซ€ เชฎเซ‹เช•เชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซ‡ เชชเชนเซ‡เชฒเชพเช‚ เชเช•เซเชเชฟเช•เซเชฏเซเชŸ เช•เชฐเชตเซเช‚ เชตเชงเซ เชธเชพเชฐเซเช‚ เชฐเชนเซ‡เชถเซ‡. เชชเชฐเช‚เชคเซ เช† เชฎเชพเชคเซเชฐ เชเช• เชญเชฒเชพเชฎเชฃ เช›เซ‡ เช…เชจเซ‡ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชจเซ€ เช–เชพเชคเชฐเซ€ เชจเชฅเซ€.

เชชเชฆเซเชงเชคเชฟเชฎเชพเช‚ เชชเชธเชพเชฐ เชฅเชฏเซ‡เชฒ เชฌเซ€เชœเซเช‚ เชชเชฐเชฟเชฎเชพเชฃ เช›เซ‡ CancellationToken. เช‘เชชเชฐเซ‡เชถเชจ เชถเชฐเซ‚ เชฅเชฏเชพ เชชเช›เซ€ เชคเซ‡เชจเซ‡ เชฐเชฆ เช•เชฐเชตเชพเชจเซเช‚ เชฏเซ‹เช—เซเชฏ เชฐเซ€เชคเซ‡ เชนเซ‡เชจเซเชกเชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชเช•เซเชเชฟเช•เซเชฏเซเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เช•เซ‹เชก เช•เซ‡เชจเซเชธเชฒเซ‡เชถเชจ เชŸเซ‹เช•เชจ เชธเซเชŸเซ‡เชŸ เชฎเชพเชŸเซ‡ เชšเซ‡เช•เชฅเซ€ เชญเชฐเซ‡เชฒเซ‹ เชนเซ‹เชตเซ‹ เชœเซ‹เชˆเช. เชœเซ‹ เชคเซเชฏเชพเช‚ เช•เซ‹เชˆ เชšเซ‡เช• เชจ เชนเซ‹เชฏ, เชคเซ‹ CancellationTokenSource เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชชเชฐ เช•เซ‰เชฒ เช•เชฐเซ‡เชฒ เชฐเชฆ เช•เชฐเชตเชพเชจเซ€ เชชเชฆเซเชงเชคเชฟ, เช•เชพเชฐเซเชฏ เชถเชฐเซ‚ เชฅเชพเชฏ เชคเซ‡ เชชเชนเซ‡เชฒเชพเช‚ เชœ เชคเซ‡เชจเชพ เช…เชฎเชฒเชจเซ‡ เชฐเซ‹เช•เชตเชพ เชฎเชพเชŸเซ‡ เชธเช•เซเชทเชฎ เชนเชถเซ‡.

เช›เซ‡เชฒเซเชฒเซเช‚ เชชเชฐเชฟเชฎเชพเชฃ เช TaskScheduler เชชเซเชฐเช•เชพเชฐเชจเซเช‚ เชถเซ‡เชกเซเชฏเซ‚เชฒเชฐ เช‘เชฌเซเชœเซ‡เช•เซเชŸ เช›เซ‡. เช† เชตเชฐเซเช— เช…เชจเซ‡ เชคเซ‡เชจเชพ เชตเช‚เชถเชœเซ‹ เชธเชฎเช—เซเชฐ เชฅเซเชฐเซ‡เชกเซ‹เชฎเชพเช‚ เช•เชพเชฐเซเชฏเซ‹เชจเซ‡ เชตเชฟเชคเชฐเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชตเซเชฏเซ‚เชนเชฐเชšเชจเชพเช“เชจเซ‡ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฐเชšเชพเชฏเซ‡เชฒ เช›เซ‡; เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡, เช•เชพเชฐเซเชฏ เชชเซ‚เชฒเชฎเชพเช‚เชฅเซ€ เชฐเซ‡เชจเซเชกเชฎ เชฅเซเชฐเซ‡เชก เชชเชฐ เชšเชฒเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

เชชเซเชฐเชคเซ€เช•เซเชทเชพ เช“เชชเชฐเซ‡เชŸเชฐ เชฌเชจเชพเชตเซ‡เชฒ เช•เชพเชฐเซเชฏ เชชเชฐ เชฒเชพเช—เซ เชฅเชพเชฏ เช›เซ‡, เชœเซ‡เชจเซ‹ เช…เชฐเซเชฅ เช›เซ‡ เช•เซ‡ เชคเซ‡เชจเชพ เชชเช›เซ€ เชฒเช–เชพเชฏเซ‡เชฒ เช•เซ‹เชก, เชœเซ‹ เชคเซเชฏเชพเช‚ เชเช• เชนเซ‹เชฏ, เชคเซ‹ เชคเซ‡ เชœ เชธเช‚เชฆเชฐเซเชญเชฎเชพเช‚ เช…เชฎเชฒเชฎเชพเช‚ เช†เชตเชถเซ‡ (เช˜เชฃเซ€ เชตเช–เชค เช†เชจเซ‹ เช…เชฐเซเชฅ เช เชœ เชฅเซเชฐเซ‡เชก เชชเชฐ เชฅเชพเชฏ เช›เซ‡) เชœเซ‡ เชชเซเชฐเชคเซ€เช•เซเชทเชพ เช•เชฐเชคเชพ เชชเชนเซ‡เชฒเชพ เช•เซ‹เชก เชนเชคเซ‹.

เชชเชฆเซเชงเชคเชฟ async void เชคเชฐเซ€เช•เซ‡ เชšเชฟเชนเซเชจเชฟเชค เชฅเชฏเซ‡เชฒ เช›เซ‡, เชœเซ‡เชจเซ‹ เช…เชฐเซเชฅ เช›เซ‡ เช•เซ‡ เชคเซ‡ เชฐเชพเชน เช“เชชเชฐเซ‡เชŸเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เช•เซ‰เชฒเชฟเช‚เช— เช•เซ‹เชก เช…เชฎเชฒ เชฎเชพเชŸเซ‡ เชฐเชพเชน เชœเซ‹เชˆ เชถเช•เชถเซ‡ เชจเชนเซ€เช‚. เชœเซ‹ เช†เชตเซ€ เชธเซเชตเชฟเชงเชพ เชœเชฐเซ‚เชฐเซ€ เชนเซ‹เชฏ, เชคเซ‹ เชชเชฆเซเชงเชคเชฟเช เช•เชพเชฐเซเชฏ เชชเชฐเชค เช•เชฐเชตเซเช‚ เช†เชตเชถเซเชฏเช• เช›เซ‡. async void เชคเชฐเซ€เช•เซ‡ เชšเชฟเชนเซเชจเชฟเชค เช•เชฐเซ‡เชฒเซ€ เชชเชฆเซเชงเชคเชฟเช“ เชเช•เชฆเชฎ เชธเชพเชฎเชพเชจเซเชฏ เช›เซ‡: เชเช• เชจเชฟเชฏเชฎ เชคเชฐเซ€เช•เซ‡, เช† เช‡เชตเซ‡เชจเซเชŸ เชนเซ‡เชจเซเชกเชฒเชฐเซเชธ เช…เชฅเชตเชพ เช…เชจเซเชฏ เชชเชฆเซเชงเชคเชฟเช“ เช›เซ‡ เชœเซ‡ เช†เช— เชชเชฐ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชธเชฟเชฆเซเชงเชพเช‚เชคเชจเซ‡ เชญเซ‚เชฒเซ€ เชœเชพเชฏ เช›เซ‡. เชœเซ‹ เชคเชฎเชพเชฐเซ‡ เชฎเชพเชคเซเชฐ เชเช•เซเชเซ‡เช•เซเชฏเซเชถเชจเชจเชพ เช…เช‚เชค เชธเซเชงเซ€ เชฐเชพเชน เชœเซ‹เชตเชพเชจเซ€ เชคเช• เช†เชชเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชชเชฐเชฟเชฃเชพเชฎ เชชเชฃ เชชเชฐเชค เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เชคเซ‹ เชคเชฎเชพเชฐเซ‡ เช•เชพเชฐเซเชฏเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

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
}

เชชเซเชฐเชฅเชฎ เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚, เช…เชฎเซ‡ เช•เซ‰เชฒเชฟเช‚เช— เชฅเซเชฐเซ‡เชกเชจเซ‡ เช…เชตเชฐเซ‹เชงเชฟเชค เช•เชฐเซเชฏเชพ เชตเชฟเชจเชพ เช•เชพเชฐเซเชฏ เชชเซ‚เชฐเซเชฃ เชฅเชตเชพเชจเซ€ เชฐเชพเชน เชœเซ‹เชˆเช เช›เซ€เช; เช…เชฎเซ‡ เชชเชฐเชฟเชฃเชพเชฎเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชคเซเชฏเชพเชฐเซ‡ เชœ เช•เชฐเซ€เชถเซเช‚ เชœเซเชฏเชพเชฐเซ‡ เชคเซ‡ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชนเชถเซ‡; เชคเซเชฏเชพเช‚ เชธเซเชงเซ€, เช•เซ‰เชฒเชฟเช‚เช— เชฅเซเชฐเซ‡เชก เชคเซ‡เชจเชพ เชชเซ‹เชคเชพเชจเชพ เช‰เชชเช•เชฐเชฃเซ‹ เชชเชฐ เช›เซ‹เชกเซ€ เชฆเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

เชฌเซ€เชœเชพ เชตเชฟเช•เชฒเซเชชเชฎเชพเช‚, เชชเชฆเซเชงเชคเชฟเชจเชพ เชชเชฐเชฟเชฃเชพเชฎเชจเซ€ เช—เชฃเชคเชฐเซ€ เชจ เชฅเชพเชฏ เชคเซเชฏเชพเช‚ เชธเซเชงเซ€ เช…เชฎเซ‡ เช•เซ‰เชฒเชฟเช‚เช— เชฅเซเชฐเซ‡เชกเชจเซ‡ เช…เชตเชฐเซ‹เชงเชฟเชค เช•เชฐเซ€เช เช›เซ€เช. เช† เชฎเชพเชคเซเชฐ เชเชŸเชฒเชพ เชฎเชพเชŸเซ‡ เช–เชฐเชพเชฌ เช›เซ‡ เช•เชพเชฐเชฃ เช•เซ‡ เช…เชฎเซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชจเชพ เช†เชตเชพ เชฎเซ‚เชฒเซเชฏเชตเชพเชจ เชธเช‚เชธเชพเชงเชจ เชชเชฐ, เชธเชฐเชณ เช†เชณเชธ เชธเชพเชฅเซ‡, เชฅเซเชฐเซ‡เชก เชชเชฐ เช•เชฌเชœเซ‹ เช•เชฐเซเชฏเซ‹ เช›เซ‡, เชชเชฃ เช•เชพเชฐเชฃ เช•เซ‡ เชœเซ‹ เช†เชชเชฃเซ‡ เช•เซ‰เชฒ เช•เชฐเซ€เช เช›เซ€เช เชคเซ‡ เชชเชฆเซเชงเชคเชฟเชจเชพ เช•เซ‹เชกเชฎเชพเช‚ เชฐเชพเชน เชœเซ‹เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช…เชจเซ‡ เชธเชฟเช‚เช•เซเชฐเชจเชพเช‡เชเซ‡เชถเชจ เชธเช‚เชฆเชฐเซเชญเชจเซ‡ เช•เซ‰เชฒเชฟเช‚เช— เชฅเซเชฐเซ‡เชก เชชเชฐ เชชเชพเช›เชพ เชซเชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชฐเชพเชน เชœเซเช“, เชชเช›เซ€ เช…เชฎเชจเซ‡ เชกเซ‡เชกเชฒเซ‹เช• เชฎเชณเชถเซ‡ : เช•เซ‰เชฒเชฟเช‚เช— เชฅเซเชฐเซ‡เชก เช…เชธเซเชฎเซ‡เชณ เชชเชฆเซเชงเชคเชฟเชจเซ€ เช—เชฃเชคเชฐเซ€ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เชชเชฐเชฟเชฃเชพเชฎเชจเซ€ เชฐเชพเชน เชœเซเช เช›เซ‡, เช…เชธเซเชฎเซ‡เชณ เชชเชฆเซเชงเชคเชฟ เช•เซ‰เชฒเชฟเช‚เช— เชฅเซเชฐเซ‡เชกเชฎเชพเช‚ เชคเซ‡เชจเชพ เช…เชฎเชฒเชจเซ‡ เชšเชพเชฒเซ เชฐเชพเช–เชตเชพ เชฎเชพเชŸเซ‡ เชจเชฟเชฐเชฐเซเชฅเช• เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ‡ เช›เซ‡.

เช† เช…เชญเชฟเช—เชฎเชจเซ‹ เชฌเซ€เชœเซ‹ เช—เซ‡เชฐเชฒเชพเชญ เช เชœเชŸเชฟเชฒ เชญเซ‚เชฒ เชนเซ‡เชจเซเชกเชฒเชฟเช‚เช— เช›เซ‡. เชนเช•เซ€เช•เชค เช เช›เซ‡ เช•เซ‡ async/await เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เช…เชธเซเชฎเซ‡เชณ เช•เซ‹เชกเชฎเชพเช‚เชจเซ€ เชญเซ‚เชฒเซ‹ เชนเซ‡เชจเซเชกเชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช–เซ‚เชฌ เชœ เชธเชฐเชณ เช›เซ‡ - เชคเซ‡ เช•เซ‹เชก เชธเชฟเช‚เช•เซเชฐเชจเชธ เชนเซ‹เชฏ เชคเซ‹ เชคเซ‡ เชœ เชฐเซ€เชคเซ‡ เชตเชฐเซเชคเซ‡ เช›เซ‡. เชœเซ‹ เช†เชชเชฃเซ‡ เช•เชพเชฐเซเชฏ เชฎเชพเชŸเซ‡ เชธเชฟเช‚เช•เซเชฐเชจเชธ เชฐเชพเชน เชตเชณเช—เชพเชก เชฎเซเช•เซเชคเชฟ เชฒเชพเช—เซ เช•เชฐเซ€เช, เชคเซ‹ เชฎเซ‚เชณ เช…เชชเชตเชพเชฆ เชเช—เซเชฐเชฟเช—เซ‡เชŸ เชเช•เซเชธเซ‡เชชเซเชถเชจเชฎเชพเช‚ เชซเซ‡เชฐเชตเชพเชฏ เช›เซ‡, เชเชŸเชฒเซ‡ เช•เซ‡. เช…เชชเชตเชพเชฆเชจเซ‡ เชนเซ‡เชจเซเชกเชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ InnerException เชชเซเชฐเช•เชพเชฐเชจเซเช‚ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเซเช‚ เชชเชกเชถเซ‡ เช…เชจเซ‡ C# เชตเชฟเชถเซเชตเชฎเชพเช‚ เชตเชงเซ เชชเชฐเชฟเชšเชฟเชค เช•เซ‡เชš เชฌเซเชฒเซ‹เช•เซเชธเชจเซ€ เชธเชพเช‚เช•เชณเชจเซ‡ เชฌเชฆเชฒเซ‡, เชเช• เช•เซ‡เชš เชฌเซเชฒเซ‹เช•เชจเซ€ เช…เช‚เชฆเชฐ เชœเชพเชคเซ‡ เชœเซ‹ เชธเชพเช‚เช•เชณ เชฒเช–เชตเซ€ เชชเชกเชถเซ‡ เช…เชฅเชตเชพ เชœเซเชฏเชพเชฐเซ‡ เชฌเชพเช‚เชงเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซเชฏเชพเชฐเซ‡ เช•เซ‡เชšเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชชเชกเชถเซ‡.

เชคเซเชฐเซ€เชœเชพ เช…เชจเซ‡ เช…เช‚เชคเชฟเชฎ เช‰เชฆเชพเชนเชฐเชฃเซ‹เชจเซ‡ เชชเชฃ เช† เชœ เช•เชพเชฐเชฃเชธเชฐ เช–เชฐเชพเชฌ เชคเชฐเซ€เช•เซ‡ เชšเชฟเชนเซเชจเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เชฌเชงเซ€ เชธเชฎเชพเชจ เชธเชฎเชธเซเชฏเชพเช“ เช›เซ‡.

เชœเซเชฏเชพเชฐเซ‡ เช•เซ‹เชˆเชชเชฃ เช…เชจเซ‡ เช•เซเชฏเชพเชฐเซ‡ เชฌเชงเซ€ เชชเชฆเซเชงเชคเชฟเช“ เช•เชพเชฐเซเชฏเซ‹เชจเชพ เชœเซ‚เชฅเชจเซ€ เชฐเชพเชน เชœเซ‹เชตเชพ เชฎเชพเชŸเซ‡ เช…เชคเซเชฏเช‚เชค เช…เชจเซเช•เซ‚เชณ เช›เซ‡; เชคเซ‡เช“ เช•เชพเชฐเซเชฏเซ‹เชจเชพ เชœเซ‚เชฅเชจเซ‡ เชเช•เชฎเชพเช‚ เชฒเชชเซ‡เชŸเซ€ เชฆเซ‡ เช›เซ‡, เชœเซ‡ เช•เชพเช‚ เชคเซ‹ เชœเซเชฏเชพเชฐเซ‡ เชœเซ‚เชฅเชฎเชพเช‚เชฅเซ€ เช•เซ‹เชˆ เช•เชพเชฐเซเชฏ เชชเซเชฐเชฅเชฎ เชŸเซเชฐเชฟเช—เชฐ เชฅเชพเชฏ เช›เซ‡ เช…เชฅเชตเชพ เชœเซเชฏเชพเชฐเซ‡ เชคเซ‡ เชฌเชงเชพเช เชคเซ‡เชฎเชจเซ‹ เช…เชฎเชฒ เชชเซ‚เชฐเซเชฃ เช•เชฐเซ€ เชฒเซ€เชงเซ‹ เชนเซ‹เชฏ เชคเซเชฏเชพเชฐเซ‡ เชซเชพเชฏเชฐ เชฅเชถเซ‡.

เชฅเซเชฐเซ‡เชกเซ‹ เช…เชŸเช•เชพเชตเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

เชตเชฟเชตเชฟเชง เช•เชพเชฐเชฃเซ‹เชธเชฐ, เชชเซเชฐเชตเชพเชน เชถเชฐเซ‚ เชฅเชฏเชพ เชชเช›เซ€ เชคเซ‡เชจเซ‡ เชฐเซ‹เช•เชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเซ€ เชถเช•เซ‡ เช›เซ‡. เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช˜เชฃเซ€ เชฌเชงเซ€ เชฐเซ€เชคเซ‹ เช›เซ‡. เชฅเซเชฐเซ‡เชก เชตเชฐเซเช—เชฎเชพเช‚ เชฌเซ‡ เชฏเซ‹เช—เซเชฏ เชจเชพเชฎเชตเชพเชณเซ€ เชชเชฆเซเชงเชคเชฟเช“ เช›เซ‡: เช›เซ‹เชกเซ€ เชฆเซ‹ ะธ เช‡เชจเซเชŸเชฐเชชเซเชŸ. เชชเซเชฐเชฅเชฎ เชเช• เช–เซ‚เชฌ เช‰เชชเชฏเซ‹เช— เชฎเชพเชŸเซ‡ เช†เช—เซเชฐเชนเชฃเซ€เชฏ เชจเชฅเซ€, เช•เชพเชฐเชฃ เช•เซ‡ เช•เซ‹เชˆเชชเชฃ เชฐเซ‡เชจเซเชกเชฎ เช•เซเชทเชฃเซ‡ เชคเซ‡เชจเซ‡ เช•เซ‰เชฒ เช•เชฐเซเชฏเชพ เชชเช›เซ€, เช•เซ‹เชˆเชชเชฃ เชธเซ‚เชšเชจเชพเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฆเชฐเชฎเชฟเชฏเชพเชจ, เชเช• เช…เชชเชตเชพเชฆ เชซเซ‡เช‚เช•เชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ ThreadAbortedException. เช•เซ‹เชˆเชชเชฃ เชชเซ‚เชฐเซเชฃเชพเช‚เช• เชšเชฒเชจเซ‡ เชตเชงเชพเชฐเชคเซ€ เชตเช–เชคเซ‡ เชคเชฎเซ‡ เช†เชตเชพ เช…เชชเชตเชพเชฆเชจเซ€ เช…เชชเซ‡เช•เซเชทเชพ เชฐเชพเช–เชคเชพ เชจเชฅเซ€, เช–เชฐเซเช‚ เชจเซ‡? เช…เชจเซ‡ เช† เชชเชฆเซเชงเชคเชฟเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชคเซ€ เชตเช–เชคเซ‡, เช† เชเช• เช–เซ‚เชฌ เชœ เชตเชพเชธเซเชคเชตเชฟเช• เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟ เช›เซ‡. เชœเซ‹ เชคเชฎเชพเชฐเซ‡ CLR เชจเซ‡ เช•เซ‹เชกเชจเชพ เชšเซ‹เช•เซเช•เชธ เชตเชฟเชญเชพเช—เชฎเชพเช‚ เช†เชตเซ‹ เช…เชชเชตเชพเชฆ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเชพเชฅเซ€ เชฐเซ‹เช•เชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ, เชคเซ‹ เชคเชฎเซ‡ เชคเซ‡เชจเซ‡ เช•เซ‰เชฒเชฎเชพเช‚ เชฒเชชเซ‡เชŸเซ€ เชถเช•เซ‹ เช›เซ‹. เชฅเซเชฐเซ‡เชก. BeginCriticalRegion, Thread.EndCriticalRegion. เช†เช–เชฐเซ€ เชฌเซเชฒเซ‹เช•เชฎเชพเช‚ เชฒเช–เชพเชฏเซ‡เชฒ เช•เซ‹เชˆเชชเชฃ เช•เซ‹เชก เช†เชตเชพ เช•เซ‰เชฒเซเชธเชฎเชพเช‚ เช†เชตเชฐเชฟเชค เชนเซ‹เชฏ เช›เซ‡. เช† เช•เชพเชฐเชฃเซ‹เชธเชฐ, เชซเซเชฐเซ‡เชฎเชตเชฐเซเช• เช•เซ‹เชกเชจเซ€ เชŠเช‚เชกเชพเชˆเชฎเชพเช‚ เชคเชฎเซ‡ เช–เชพเชฒเซ€ เชชเซเชฐเชฏเชพเชธ เชธเชพเชฅเซ‡ เชฌเซเชฒเซ‹เช•เซเชธ เชถเซ‹เชงเซ€ เชถเช•เซ‹ เช›เซ‹, เชชเชฐเช‚เชคเซ เช…เช‚เชคเซ‡ เช–เชพเชฒเซ€ เชจเชนเซ€เช‚. เชฎเชพเชˆเช•เซเชฐเซ‹เชธเซ‹เชซเซเชŸ เช† เชชเชฆเซเชงเชคเชฟเชจเซ‡ เชเชŸเชฒเซ‹ เชจเชฟเชฐเซเชคเซเชธเชพเชนเชฟเชค เช•เชฐเซ‡ เช›เซ‡ เช•เซ‡ เชคเซ‡เช“เช เชคเซ‡เชจเซ‡ .net เช•เซ‹เชฐเชฎเชพเช‚ เชธเชฎเชพเชตเซ€ เชจเชฅเซ€.

เชตเชฟเช•เซเชทเซ‡เชช เชชเชฆเซเชงเชคเชฟ เชตเชงเซ เช…เชจเซเชฎเชพเชจเชฟเชค เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡. เชคเซ‡ เช…เชชเชตเชพเชฆ เชธเชพเชฅเซ‡ เชฅเซเชฐเซ‡เชกเชจเซ‡ เชตเชฟเช•เซเชทเซ‡เชชเชฟเชค เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡ ThreadInterruptedException เชฎเชพเชคเซเชฐ เชคเซ‡ เช•เซเชทเชฃเซ‹ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชœเซเชฏเชพเชฐเซ‡ เชฅเซเชฐเซ‡เชก เชฐเชพเชน เชœเซ‹เชตเชพเชจเซ€ เชธเซเชฅเชฟเชคเชฟเชฎเชพเช‚ เชนเซ‹เชฏ. เชตเซ‡เช‡เชŸเชนเซ‡เชจเซเชกเชฒ, เชฒเซ‹เช• เช…เชฅเชตเชพ เชฅเซเชฐเซ‡เชก.เชธเซเชฒเซ€เชชเชจเซ‡ เช•เซ‰เชฒ เช•เชฐเซเชฏเชพ เชชเช›เซ€ เชฐเชพเชน เชœเซ‹เชคเซ€ เชตเช–เชคเซ‡ เชฒเชŸเช•เชคเซ€ เชตเช–เชคเซ‡ เชคเซ‡ เช† เชธเซเชฅเชฟเชคเชฟเชฎเชพเช‚ เชชเซเชฐเชตเซ‡เชถ เช•เชฐเซ‡ เช›เซ‡.

เช‰เชชเชฐ เชตเชฐเซเชฃเชตเซ‡เชฒ เชฌเช‚เชจเซ‡ เชตเชฟเช•เชฒเซเชชเซ‹ เช–เชฐเชพเชฌ เช›เซ‡ เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡ เช…เชฃเชงเชพเชฐเซ€ เช›เซ‡. เช‰เช•เซ‡เชฒ เช เชธเซเชŸเซเชฐเช•เซเชšเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ‹ เช›เซ‡ เชฐเชฆเซเชฆเซ€เช•เชฐเชฃ เชŸเซ‹เช•เชจ เช…เชจเซ‡ เชตเชฐเซเช— เช•เซ‡เชจเซเชธเชฒเซ‡เชถเชจ เชŸเซ‹เช•เชจเชธเซ‹เชฐเซเชธ. เชฎเซเชฆเซเชฆเซ‹ เช† เช›เซ‡: เช•เซ‡เชจเซเชธเชฒเซ‡เชถเชจ เชŸเซ‹เช•เชจเชธเซ‹เชฐเซเชธ เช•เซเชฒเชพเชธเชจเซ‹ เชเช• เชฆเชพเช–เชฒเซ‹ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เช›เซ‡ เช…เชจเซ‡ เชœเซ‡ เชคเซ‡เชจเซ€ เชฎเชพเชฒเชฟเช•เซ€ เชงเชฐเชพเชตเซ‡ เช›เซ‡ เชคเซ‡ เชœ เชชเชฆเซเชงเชคเชฟเชจเซ‡ เช•เซ‰เชฒ เช•เชฐเซ€เชจเซ‡ เช“เชชเชฐเซ‡เชถเชจเชจเซ‡ เชฐเซ‹เช•เซ€ เชถเช•เซ‡ เช›เซ‡. เชฐเชฆ เช•เชฐเซ‹. เชฎเชพเชคเซเชฐ เช•เซ‡เชจเซเชธเชฒเซ‡เชถเชจ เชŸเซ‹เช•เชจ เชœ เช‘เชชเชฐเซ‡เชถเชจเชฎเชพเช‚ เชœ เชชเชธเชพเชฐ เชฅเชพเชฏ เช›เซ‡. CancellationToken เชฎเชพเชฒเชฟเช•เซ‹ เชชเซ‹เชคเซ‡ เช“เชชเชฐเซ‡เชถเชจ เชฐเชฆ เช•เชฐเซ€ เชถเช•เชคเชพ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เช“เชชเชฐเซ‡เชถเชจ เชฐเชฆ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡ เช•เซ‡ เช•เซ‡เชฎ เชคเซ‡ เชฎเชพเชคเซเชฐ เชคเชชเชพเชธเซ€ เชถเช•เซ‡ เช›เซ‡. เช† เชฎเชพเชŸเซ‡ เชฌเซเชฒเชฟเชฏเชจ เชชเซเชฐเซ‹เชชเชฐเซเชŸเซ€ เช›เซ‡ เชฐเชฆ เช•เชฐเชตเชพเชจเซ€ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเซ€ เช›เซ‡ เช…เชจเซ‡ เชชเชฆเซเชงเชคเชฟ ThrowIfCancelRequested. เชฌเชพเชฆเชฎเชพเช‚ เช…เชชเชตเชพเชฆ เชซเซ‡เช‚เช•เชถเซ‡ TaskCancelledException เชœเซ‹ เช•เซ‡เชจเซเชธเชฒเซ‡เชถเชจ เชŸเซ‹เช•เชจ เชฆเชพเช–เชฒเชพเชจเซ‡ เชชเซ‹เชชเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซ‹ เช•เซ‡เชจเซเชธเชฒ เชชเชฆเซเชงเชคเชฟเชจเซ‡ เชฌเซ‹เชฒเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€. เช…เชจเซ‡ เช† เชคเซ‡ เชชเชฆเซเชงเชคเชฟ เช›เซ‡ เชœเซ‡เชจเซ‹ เชนเซเช‚ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ€ เชญเชฒเชพเชฎเชฃ เช•เชฐเซเช‚ เช›เซเช‚. เช…เชชเชตเชพเชฆ เช•เชพเชฎเช—เซ€เชฐเซ€ เช•เชฏเชพ เชฌเชฟเช‚เชฆเซเช เชฌเช‚เชง เช•เชฐเซ€ เชถเช•เชพเชฏ เชคเซ‡เชจเชพ เชชเชฐ เชธเช‚เชชเซ‚เชฐเซเชฃ เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชฎเซ‡เชณเชตเซ€เชจเซ‡ เช…เช—เชพเช‰เชจเชพ เชตเชฟเช•เชฒเซเชชเซ‹ เช•เชฐเชคเชพเช‚ เช† เชธเซเชงเชพเชฐเซ‹ เช›เซ‡.

เชฅเซเชฐเซ‡เชกเชจเซ‡ เชฐเซ‹เช•เชตเชพ เชฎเชพเชŸเซ‡เชจเซ‹ เชธเซŒเชฅเซ€ เช˜เชพเชคเช•เซ€ เชตเชฟเช•เชฒเซเชช Win32 API เชŸเชฐเซเชฎเชฟเชจเซ‡เชŸ เชฅเซเชฐเซ‡เชก เชซเช‚เช•เซเชถเชจเชจเซ‡ เช•เซ‰เชฒ เช•เชฐเชตเชพเชจเซ‹ เช›เซ‡. เช† เชซเช‚เช•เซเชถเชจเชจเซ‡ เช•เซ‰เชฒ เช•เชฐเซเชฏเชพ เชชเช›เซ€ CLR เชจเซเช‚ เชตเชฐเซเชคเชจ เช…เชฃเชงเชพเชฐเซ€ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡. MSDN เชชเชฐ เช† เชซเช‚เช•เซเชถเชจ เชตเชฟเชถเซ‡ เชจเซ€เชšเซ‡ เชฒเช–เซ‡เชฒเซเช‚ เช›เซ‡: "TerminateThread เช เชเช• เช–เชคเชฐเชจเชพเช• เช•เชพเชฐเซเชฏ เช›เซ‡ เชœเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชซเช•เซเชค เช…เชคเซเชฏเช‚เชค เช†เชคเซเชฏเช‚เชคเชฟเช• เช•เซ‡เชธเซ‹เชฎเชพเช‚ เชฅเชตเซ‹ เชœเซ‹เชˆเช. "

FromAsync เชชเชฆเซเชงเชคเชฟเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฒเซ‡เช—เชธเซ€ API เชจเซ‡ เช•เชพเชฐเซเชฏ เช†เชงเชพเชฐเชฟเชค เชฎเชพเช‚ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เช•เชฐเชตเซเช‚

เชœเซ‹ เชคเชฎเซ‡ เชเชตเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชชเชฐ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชชเซ‚เชฐเชคเชพ เชญเชพเช—เซเชฏเชถเชพเชณเซ€ เช›เซ‹ เช•เซ‡ เชœเซ‡ เชŸเชพเชธเซเช•เซเชธ เชฐเชœเซ‚ เชฅเชฏเชพ เชชเช›เซ€ เชถเชฐเซ‚ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚ เช…เชจเซ‡ เชฎเซ‹เชŸเชพเชญเชพเช—เชจเชพ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“ เชฎเชพเชŸเซ‡ เชถเชพเช‚เชค เชญเชฏเชพเชจเช•เชคเชพ เชชเซ‡เชฆเชพ เช•เชฐเชตเชพเชจเซเช‚ เชฌเช‚เชง เช•เชฐเซ€ เชฆเซ€เชงเซเช‚ เชนเชคเซเช‚, เชคเซ‹ เชคเชฎเชพเชฐเซ‡ เช˜เชฃเชพ เชฌเชงเชพ เชœเซ‚เชจเชพ API, เชฌเช‚เชจเซ‡ เชคเซƒเชคเซ€เชฏ-เชชเช•เซเชท เช…เชจเซ‡ เชคเชฎเชพเชฐเซ€ เชŸเซ€เชฎ เชธเชพเชฅเซ‡ เชตเซเชฏเชตเชนเชพเชฐ เช•เชฐเชตเซ‹ เชชเชกเชถเซ‡ เชจเชนเซ€เช‚. เชญเซ‚เชคเช•เชพเชณเชฎเชพเช‚ เชคเซเชฐเชพเชธ เช†เชชเซเชฏเซ‹ เช›เซ‡. เชธเชฆเชญเชพเช—เซเชฏเซ‡, .NET เชซเซเชฐเซ‡เชฎเชตเชฐเซเช• เชŸเซ€เชฎเซ‡ เช…เชฎเชพเชฐเซ€ เชธเช‚เชญเชพเชณ เชฒเซ€เชงเซ€, เชœเซ‹ เช•เซ‡ เช•เชฆเชพเชš เชงเซเชฏเซ‡เชฏ เช†เชชเชฃเซ€ เชธเช‚เชญเชพเชณ เชฐเชพเช–เชตเชพเชจเซ‹ เชนเชคเซ‹. เชคเซ‡ เช—เชฎเซ‡ เชคเซ‡เชŸเชฒเซเช‚ เชนเซ‹เชฏ, .NET เชชเชพเชธเซ‡ เชœเซ‚เชจเชพ เช…เชธเซเชฎเซ‡เชณ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เช…เชญเชฟเช—เชฎเซ‹เชฎเชพเช‚ เชฒเช–เซ‡เชฒเชพ เช•เซ‹เชกเชจเซ‡ เชชเซ€เชกเชพเชฐเชนเชฟเชค เชฐเซ€เชคเซ‡ เชจเชตเชพเชฎเชพเช‚ เช•เชจเซเชตเชฐเซเชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช˜เชฃเชพ เชฌเชงเชพ เชŸเซ‚เชฒเซเชธ เช›เซ‡. เชคเซ‡เชฎเชพเช‚เชฅเซ€ เชเช• เชŸเชพเชธเซเช•เชซเซ…เช•เซเชŸเชฐเซ€เชจเซ€ FromAsync เชชเชฆเซเชงเชคเชฟ เช›เซ‡. เชจเซ€เชšเซ‡เชจเชพ เช•เซ‹เชก เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚, เช† เชชเชฆเซเชงเชคเชฟเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชนเซเช‚ WebRequest เชตเชฐเซเช—เชจเซ€ เชœเซ‚เชจเซ€ async เชชเชฆเซเชงเชคเชฟเช“เชจเซ‡ เช•เชพเชฐเซเชฏเชฎเชพเช‚ เชฒเชชเซ‡เชŸเซ€เชถ.

object state = null;
WebRequest wr = WebRequest.CreateHttp("http://github.com");
await Task.Factory.FromAsync(
    wr.BeginGetResponse,
    we.EndGetResponse
);

เช† เชฎเชพเชคเซเชฐ เชเช• เช‰เชฆเชพเชนเชฐเชฃ เช›เซ‡ เช…เชจเซ‡ เชคเชฎเชพเชฐเซ‡ เช† เชฌเชฟเชฒเซเชŸ-เช‡เชจ เชชเซเชฐเช•เชพเชฐเซ‹ เชธเชพเชฅเซ‡ เช•เชฐเชตเซเช‚ เชชเชกเซ‡ เชคเซ‡เชตเซ€ เชถเช•เซเชฏเชคเชพ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เช•เซ‹เชˆเชชเชฃ เชœเซ‚เชจเซ‹ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชซเช•เซเชค BeginDoSomething เชชเชฆเซเชงเชคเชฟเช“เชฅเซ€ เชญเชฐเชชเซ‚เชฐ เชนเซ‹เชฏ เช›เซ‡ เชœเซ‡ เชคเซ‡เชจเซ‡ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชคเซ€ IAsyncResult เช…เชจเซ‡ EndDoSomething เชชเชฆเซเชงเชคเชฟเช“ เชชเชฐเชค เช•เชฐเซ‡ เช›เซ‡.

TaskCompletionSource เชตเชฐเซเช—เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฒเซ‡เช—เชธเซ€ API เชจเซ‡ Task Based เชฎเชพเช‚ เช•เชจเซเชตเชฐเซเชŸ เช•เชฐเซ‹

เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ‡เชตเชพเชจเซเช‚ เชฌเซ€เชœเซเช‚ เชฎเชนเชคเซเชตเชจเซเช‚ เชธเชพเชงเชจ เช เชตเชฐเซเช— เช›เซ‡ TaskCompletionSource. เช•เชพเชฐเซเชฏเซ‹, เชนเซ‡เชคเซ เช…เชจเซ‡ เช•เชพเชฎเช—เซ€เชฐเซ€เชจเชพ เชธเชฟเชฆเซเชงเชพเช‚เชคเชจเชพ เชธเช‚เชฆเชฐเซเชญเชฎเชพเช‚, เชคเซ‡ เชฅเซเชฐเซ‡เชกเชชเซเชฒ เชตเชฐเซเช—เชจเซ€ RegisterWaitForSingleObject เชชเชฆเซเชงเชคเชฟเชจเซ€ เช•เช‚เชˆเช• เช…เช‚เชถเซ‡ เชฏเชพเชฆ เช…เชชเชพเชตเซ‡ เช›เซ‡, เชœเซ‡เชจเชพ เชตเชฟเชถเซ‡ เชฎเซ‡เช‚ เช‰เชชเชฐ เชฒเช–เซเชฏเซเช‚ เช›เซ‡. เช† เชตเชฐเซเช—เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡, เชคเชฎเซ‡ เช•เชพเชฐเซเชฏเชฎเชพเช‚ เชœเซ‚เชจเชพ เช…เชธเซเชฎเซ‡เชณ API เชจเซ‡ เชธเชฐเชณเชคเชพเชฅเซ€ เช…เชจเซ‡ เชธเชนเซ‡เชฒเชพเช‡เชฅเซ€ เชฒเชชเซ‡เชŸเซ€ เชถเช•เซ‹ เช›เซ‹.

เชคเชฎเซ‡ เช•เชนเซ‡เชถเซ‹ เช•เซ‡ เชฎเซ‡เช‚ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช† เชนเซ‡เชคเซเช“ เชฎเชพเชŸเซ‡ เชฌเชจเชพเชตเชพเชฏเซ‡เชฒ TaskFactory เชตเชฐเซเช—เชจเซ€ FromAsync เชชเชฆเซเชงเชคเชฟ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€ เช›เซ‡. เช…เชนเซ€เช‚ เช†เชชเชฃเซ‡ .net เชฎเชพเช‚ เช…เชธเซเชฎเซ‡เชณ เชฎเซ‹เชกเชฒเซเชธเชจเชพ เชตเชฟเช•เชพเชธเชจเชพ เชธเชฎเช—เซเชฐ เช‡เชคเชฟเชนเชพเชธเชจเซ‡ เชฏเชพเชฆ เชฐเชพเช–เชตเชพเชจเซ‹ เชฐเชนเซ‡เชถเซ‡ เชœเซ‡ เชฎเชพเช‡เช•เซเชฐเซ‹เชธเซ‹เชซเซเชŸเซ‡ เช›เซ‡เชฒเซเชฒเชพ 15 เชตเชฐเซเชทเซ‹เชฎเชพเช‚ เช“เชซเชฐ เช•เชฐเซเชฏเซ‹ เช›เซ‡: เชŸเชพเชธเซเช•-เชฌเซ‡เชเซเชก เช…เชธเชฟเช‚เช•เซเชฐเซ‹เชจเชธ เชชเซ‡เชŸเชฐเซเชจ (TAP) เชชเชนเซ‡เชฒเชพเช‚, เชคเซเชฏเชพเช‚ เช…เชธเชฟเช‚เช•เซเชฐเซ‹เชจเชธ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เชชเซ‡เชŸเชฐเซเชจ (APP) เชนเชคเซ€, เชœเซ‡ เชชเชฆเซเชงเชคเชฟเช“ เชตเชฟเชถเซ‡ เชนเชคเซเช‚ เชถเชฐเซ‚เช†เชคเชถเซเช‚ เช•เช‚เชˆเช• เชชเชฐเชค IAsyncResult เช…เชจเซ‡ เชชเชฆเซเชงเชคเชฟเช“ เช…เช‚เชคDoSomething เช•เซ‡ เชœเซ‡ เชคเซ‡เชจเซ‡ เชธเซเชตเซ€เช•เชพเชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เช† เชตเชฐเซเชทเซ‹เชจเชพ เชตเชพเชฐเชธเชพ เชฎเชพเชŸเซ‡ FromAsync เชชเชฆเซเชงเชคเชฟ เชเช•เชฆเชฎ เชชเชฐเชซเซ‡เช•เซเชŸ เช›เซ‡, เชชเชฐเช‚เชคเซ เชธเชฎเชฏ เชœเชคเชพเช‚, เชคเซ‡เชจเซ‡ เช‡เชตเซ‡เชจเซเชŸ เช†เชงเชพเชฐเชฟเชค เช…เชธเชฟเช‚เช•เซเชฐเซ‹เชจเชธ เชชเซ‡เชŸเชฐเซเชจ (เช‡เชเชชเซ€), เชœเซ‡ เชงเชพเชฐเซ‡ เช›เซ‡ เช•เซ‡ เชœเซเชฏเชพเชฐเซ‡ เช…เชธเซเชฎเซ‡เชณ เช•เชพเชฎเช—เซ€เชฐเซ€ เชชเซ‚เชฐเซเชฃ เชฅเชถเซ‡ เชคเซเชฏเชพเชฐเซ‡ เช˜เชŸเชจเชพ เชŠเชญเซ€ เชฅเชถเซ‡.

TaskCompletionSource เช‡เชตเซ‡เชจเซเชŸ เชฎเซ‰เชกเชฒเชจเซ€ เช†เชธเชชเชพเชธ เชฌเชจเซ‡เชฒเชพ Tasks เช…เชจเซ‡ เชฒเซ‡เช—เชธเซ€ API เชจเซ‡ เชฒเชชเซ‡เชŸเชตเชพ เชฎเชพเชŸเซ‡ เชฏเซ‹เช—เซเชฏ เช›เซ‡. เชคเซ‡เชจเชพ เช•เชพเชฐเซเชฏเชจเซ‹ เชธเชพเชฐ เชจเซ€เชšเซ‡ เชฎเซเชœเชฌ เช›เซ‡: เช† เชตเชฐเซเช—เชจเชพ เช‘เชฌเซเชœเซ‡เช•เซเชŸเชฎเชพเช‚ เชŸเชพเชธเซเช• เชชเซเชฐเช•เชพเชฐเชจเซ€ เชœเชพเชนเซ‡เชฐ เชฎเชฟเชฒเช•เชค เช›เซ‡, เชœเซ‡เชจเซ€ เชธเซเชฅเชฟเชคเชฟเชจเซ‡ TaskCompletionSource เชตเชฐเซเช—เชจเซ€ SetResult, SetException เชตเช—เซ‡เชฐเซ‡ เชชเชฆเซเชงเชคเชฟเช“ เชฆเซเชตเชพเชฐเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชธเซเชฅเชพเชจเซ‹ เชชเชฐ เชœเซเชฏเชพเช‚ เชฐเชพเชน เช“เชชเชฐเซ‡เชŸเชฐ เช† เช•เชพเชฐเซเชฏ เชฎเชพเชŸเซ‡ เชฒเชพเช—เซ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚, เชคเซ‡ TaskCompletionSource เชชเชฐ เชฒเชพเช—เซ เช•เชฐเชพเชฏเซ‡เชฒ เชชเชฆเซเชงเชคเชฟเชจเชพ เช†เชงเชพเชฐเซ‡ เช…เชชเชตเชพเชฆ เชธเชพเชฅเซ‡ เชšเชฒเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เช…เชฅเชตเชพ เชจเชฟเชทเซเชซเชณ เชœเชถเซ‡. เชœเซ‹ เชคเซ‡ เชนเชœเซ เชชเชฃ เชธเซเชชเชทเซเชŸ เชจเชฅเซ€, เชคเซ‹ เชšเชพเชฒเซ‹ เช† เช•เซ‹เชก เช‰เชฆเชพเชนเชฐเชฃ เชœเซ‹เชˆเช, เชœเซเชฏเชพเช‚ เช•เซ‡เชŸเชฒเชพเช• เชœเซ‚เชจเชพ EAP API เชจเซ‡ TaskCompletionSource เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชŸเชพเชธเซเช•เชฎเชพเช‚ เช†เชตเชฐเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡: เชœเซเชฏเชพเชฐเซ‡ เช‡เชตเซ‡เชจเซเชŸ เชซเชพเชฏเชฐ เชฅเชพเชฏ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เช•เชพเชฐเซเชฏ เชชเซ‚เชฐเซเชฃ เชธเซเชฅเชฟเชคเชฟเชฎเชพเช‚ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡, เช…เชจเซ‡ เชชเซเชฐเชคเซ€เช•เซเชทเชพ เช“เชชเชฐเซ‡เชŸเชฐเชจเซ‡ เชฒเชพเช—เซ เช•เชฐเชตเชพเชจเซ€ เชชเชฆเซเชงเชคเชฟ เช† เช•เชพเชฐเซเชฏ เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชชเซเชฐเชพเชชเซเชค เช•เชฐเซเชฏเชพ เชชเช›เซ€ เชคเซ‡เชจเซเช‚ เช…เชฎเชฒเซ€เช•เชฐเชฃ เชซเชฐเซ€ เชถเชฐเซ‚ เช•เชฐเชถเซ‡ เชชเชฐเชฟเชฃเชพเชฎ.

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 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชœเซ‚เชจเชพ API เชจเซ‡ เชตเซ€เช‚เชŸเชพเชณเชตเซเช‚ เชเชŸเชฒเซเช‚ เชœ เชจเชฅเซ€. เช† เชตเชฐเซเช—เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฅเซเชฐเซ‡เชกเซ‹ เชชเชฐ เช•เชฌเชœเซ‹ เชจ เช•เชฐเชคเชพ เช•เชพเชฐเซเชฏเซ‹ เชชเชฐ เชตเชฟเชตเชฟเชง API เชจเซ‡ เชกเชฟเชเชพเช‡เชจ เช•เชฐเชตเชพเชจเซ€ เชฐเชธเชชเซเชฐเชฆ เชธเช‚เชญเชพเชตเชจเชพ เช–เซ‹เชฒเซ‡ เช›เซ‡. เช…เชจเซ‡ เชธเซเชŸเซเชฐเซ€เชฎ, เชœเซ‡เชฎ เช†เชชเชฃเซ‡ เชฏเชพเชฆ เชฐเชพเช–เซ€เช เช›เซ€เช, เชเช• เช–เชฐเซเชšเชพเชณ เชธเช‚เชธเชพเชงเชจ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ€ เชธเช‚เช–เซเชฏเชพ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เช›เซ‡ (เชฎเซเช–เซเชฏเชคเซเชตเซ‡ RAM เชจเซ€ เชฎเชพเชคเซเชฐเชพ เชฆเซเชตเชพเชฐเชพ). เช† เชฎเชฐเซเชฏเชพเชฆเชพ เชตเชฟเช•เชพเชธ เชฆเซเชตเชพเชฐเชพ เชธเชฐเชณเชคเชพเชฅเซ€ เชชเซเชฐเชพเชชเซเชค เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชœเชŸเชฟเชฒ เชตเซเชฏเชตเชธเชพเชฏ เชคเชฐเซเช• เชธเชพเชฅเซ‡ เชฒเซ‹เชก เช•เชฐเซ‡เชฒ เชตเซ‡เชฌ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ. เชฒเซ‹เช‚เช—-เชชเซ‹เชฒเซ€เช‚เช— เชœเซ‡เชตเซ€ เชฏเซเช•เซเชคเชฟเชจเซ‹ เช…เชฎเชฒ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชนเซเช‚ เชœเซ‡ เชถเช•เซเชฏเชคเชพเช“ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€ เชฐเชนเซเชฏเซ‹ เช›เซเช‚ เชคเซ‡เชจเชพ เชชเชฐ เชšเชพเชฒเซ‹ เชตเชฟเชšเชพเชฐ เช•เชฐเซ€เช.

เชŸเซ‚เช‚เช•เชฎเชพเช‚, เชฏเซเช•เซเชคเชฟเชจเซ‹ เชธเชพเชฐ เช† เช›เซ‡: เชคเชฎเชพเชฐเซ‡ เชคเซ‡เชจเซ€ เชฌเชพเชœเซเชฎเชพเช‚ เชฌเชจเชคเซ€ เช•เซ‡เชŸเชฒเซ€เช• เช˜เชŸเชจเชพเช“ เชตเชฟเชถเซ‡ API เชชเชพเชธเซ‡เชฅเซ€ เชฎเชพเชนเชฟเชคเซ€ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เชœเซเชฏเชพเชฐเซ‡ API เช•เซ‡เชŸเชฒเชพเช• เช•เชพเชฐเชฃเซ‹เชธเชฐ เช˜เชŸเชจเชพเชจเซ€ เชœเชพเชฃ เช•เชฐเซ€ เชถเช•เชคเซเช‚ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชซเช•เซเชค เชฐเชพเชœเซเชฏ เชชเชฐเชค เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡. เช†เชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ WebSocket เชจเชพ เชธเชฎเชฏ เชชเชนเซ‡เชฒเชพ เช…เชฅเชตเชพ เชœเซเชฏเชพเชฐเซ‡ เช† เชŸเซ‡เช•เซเชจเซ‹เชฒเซ‹เชœเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เซ‹เชˆ เช•เชพเชฐเชฃเซ‹เชธเชฐ เช…เชถเช•เซเชฏ เชนเชคเซเช‚ เชคเซเชฏเชพเชฐเซ‡ HTTP เชจเซ€ เชŸเซ‹เชš เชชเชฐ เชฌเชจเซ‡เชฒ เชคเชฎเชพเชฎ API เช›เซ‡. เช•เซเชฒเชพเชฏเช‚เชŸ HTTP เชธเชฐเซเชตเชฐเชจเซ‡ เชชเซ‚เช›เซ€ เชถเช•เซ‡ เช›เซ‡. HTTP เชธเชฐเซเชตเชฐ เชชเซ‹เชคเซ‡ เช•เซเชฒเชพเชฏเช‚เชŸ เชธเชพเชฅเซ‡ เชตเชพเชคเชšเซ€เชค เชถเชฐเซ‚ เช•เชฐเซ€ เชถเช•เชคเซเช‚ เชจเชฅเซ€. เชŸเชพเชˆเชฎเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเชฐเซเชตเชฐเชจเซเช‚ เชฎเชคเชฆเชพเชจ เช•เชฐเชตเซเช‚ เช เชเช• เชธเชฐเชณ เช‰เชชเชพเชฏ เช›เซ‡, เชชเชฐเช‚เชคเซ เช†เชจเชพเชฅเซ€ เชธเชฐเซเชตเชฐ เชชเชฐ เชตเชงเชพเชฐเชพเชจเซ‹ เชญเชพเชฐ เชชเชกเซ‡ เช›เซ‡ เช…เชจเซ‡ เชธเชฐเซ‡เชฐเชพเชถ TimerInterval/2 เชชเชฐ เชตเชงเชพเชฐเชพเชจเซ‹ เชตเชฟเชฒเช‚เชฌ เชฅเชพเชฏ เช›เซ‡. เช†เชจเซ€ เช†เชธเชชเชพเชธ เชœเชตเชพ เชฎเชพเชŸเซ‡, เชฒเซ‹เช‚เช— เชชเซ‹เชฒเชฟเช‚เช— เชจเชพเชฎเชจเซ€ เชฏเซเช•เซเชคเชฟเชจเซ€ เชถเซ‹เชง เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€, เชœเซ‡เชฎเชพเช‚ เชชเซเชฐเชคเชฟเชญเชพเชตเชฎเชพเช‚ เชตเชฟเชฒเช‚เชฌเชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡. เชธเชฐเซเชตเชฐ เชœเซเชฏเชพเช‚ เชธเซเชงเซ€ เชธเชฎเชฏเชธเชฎเชพเชชเซเชคเชฟ เชธเชฎเชพเชชเซเชค เชจ เชฅเชพเชฏ เช…เชฅเชตเชพ เช‡เชตเซ‡เชจเซเชŸ เชฅเชถเซ‡. เชœเซ‹ เช•เซ‹เชˆ เช˜เชŸเชจเชพ เชฌเชจเซ‡ เช›เซ‡, เชคเซ‹ เชคเซ‡เชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡; เชœเซ‹ เชจเชนเซ€เช‚, เชคเซ‹ เชตเชฟเชจเช‚เชคเซ€ เชซเชฐเซ€เชฅเซ€ เชฎเซ‹เช•เชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

while(!eventOccures && !timeoutExceeded)  {

  CheckTimout();
  CheckEvent();
  Thread.Sleep(1);
}

เชชเชฐเช‚เชคเซ เช‡เชตเซ‡เชจเซเชŸเชจเซ€ เชฐเชพเชน เชœเซ‹เชˆ เชฐเชนเซ‡เชฒเชพ เช—เซเชฐเชพเชนเช•เซ‹เชจเซ€ เชธเช‚เช–เซเชฏเชพ เชตเชงเชคเชพ เชœ เช† เชชเซเชฐเช•เชพเชฐเชจเซ‹ เช‰เชชเชพเชฏ เชญเชฏเช‚เช•เชฐ เชธเชพเชฌเชฟเชค เชฅเชถเซ‡, เช•เชพเชฐเชฃ เช•เซ‡... เช†เชตเชพ เชฆเชฐเซ‡เช• เช•เซเชฒเชพเชฏเช‚เชŸ เช˜เชŸเชจเชพเชจเซ€ เชฐเชพเชน เชœเซ‹เชคเชพ เชธเชฎเช—เซเชฐ เชฅเซเชฐเซ‡เชก เชชเชฐ เช•เชฌเชœเซ‹ เช•เชฐเซ‡ เช›เซ‡. เชนเชพ, เช…เชจเซ‡ เชœเซเชฏเชพเชฐเซ‡ เช‡เชตเซ‡เชจเซเชŸ เชŸเซเชฐเชฟเช—เชฐ เชฅเชพเชฏ เชคเซเชฏเชพเชฐเซ‡ เช…เชฎเชจเซ‡ เชตเชงเชพเชฐเชพเชจเซ‹ 1ms เชตเชฟเชฒเช‚เชฌ เชฎเชณเซ‡ เช›เซ‡, เชฎเซ‹เชŸเชพเชญเชพเช—เซ‡ เช† เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชถเชพ เชฎเชพเชŸเซ‡ เชธเซ‰เชซเซเชŸเชตเซ‡เชฐเชจเซ‡ เชคเซ‡ เชฌเชจเซ€ เชถเช•เซ‡ เชคเซ‡เชจเชพ เช•เชฐเชคเชพเช‚ เชตเชงเซ เช–เชฐเชพเชฌ เชฌเชจเชพเชตเซ‡ เช›เซ‡? เชœเซ‹ เช†เชชเชฃเซ‡ Thread.Sleep(1) เชจเซ‡ เชฆเซ‚เชฐ เช•เชฐเซ€เช, เชคเซ‹ เชจเชฟเชฐเชฐเซเชฅเช• เชฐเซ€เชคเซ‡ เช†เชชเชฃเซ‡ เชเช• เชชเซเชฐเซ‹เชธเซ‡เชธเชฐ เช•เซ‹เชฐ 100% เชจเชฟเชทเซเช•เซเชฐเชฟเชฏ เชฒเซ‹เชก เช•เชฐเซ€เชถเซเช‚, เชเช• เชจเช•เชพเชฎเซ€ เชšเช•เซเชฐเชฎเชพเช‚ เชซเชฐเชคเชพ. TaskCompletionSource เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชคเชฎเซ‡ เช† เช•เซ‹เชกเชจเซ‡ เชธเชฐเชณเชคเชพเชฅเซ€ เชฐเซ€เชฎเซ‡เช• เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชจเซ‡ เช‰เชชเชฐ เชฆเชฐเซเชถเชพเชตเซ‡เชฒ เชคเชฎเชพเชฎ เชธเชฎเชธเซเชฏเชพเช“ เชนเชฒ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹:

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/await เช“เชชเชฐเซ‡เชŸเชฐเซ‹, เชœเซ‡เชฎ เช•เซ‡ เชฏเซ€เชฒเซเชก เชฐเซ€เชŸเชฐเซเชจ เช“เชชเชฐเซ‡เชŸเชฐ, เชชเชฆเซเชงเชคเชฟเชฎเชพเช‚เชฅเซ€ เชธเซเชŸเซ‡เชŸ เชฎเชถเซ€เชจ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡ เช›เซ‡, เช…เชจเซ‡ เช† เชเช• เชจเชตเชพ เช‘เชฌเซเชœเซ‡เช•เซเชŸเชจเซเช‚ เชจเชฟเชฐเซเชฎเชพเชฃ เช›เซ‡, เชœเซ‡ เชฒเช—เชญเช— เชนเช‚เชฎเซ‡เชถเชพ เชฎเชนเชคเซเชตเชจเซเช‚ เชจเชฅเซ€ เชนเซ‹เชคเซเช‚, เชชเชฐเช‚เชคเซ เชญเชพเช—เซเชฏเซ‡ เชœ เช•เชฟเชธเซเชธเชพเช“เชฎเชพเช‚ เชคเซ‡ เชธเชฎเชธเซเชฏเชพ เชŠเชญเซ€ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡. เช† เช•เซ‡เชธ เชเชตเซ€ เชชเชฆเซเชงเชคเชฟ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ เชœเซ‡เชจเซ‡ เช–เชฐเซ‡เช–เชฐ เชตเชพเชฐเช‚เชตเชพเชฐ เช•เชนเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช…เชฎเซ‡ เชฆเชธ เช…เชจเซ‡ เชธเซ‡เช‚เช•เชกเซ‹ เชนเชœเชพเชฐเซ‹ เช•เซ‰เชฒเซเชธ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช. เชœเซ‹ เช†เชตเซ€ เชชเชฆเซเชงเชคเชฟ เชเชตเซ€ เชฐเซ€เชคเซ‡ เชฒเช–เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช•เซ‡ เชฎเซ‹เชŸเชพ เชญเชพเช—เชจเชพ เช•เชฟเชธเซเชธเชพเช“เชฎเชพเช‚ เชคเซ‡ เชคเชฎเชพเชฎ เชชเซเชฐเชคเซ€เช•เซเชทเชพ เชชเชฆเซเชงเชคเชฟเช“เชจเซ‡ เชฌเชพเชฏเชชเชพเชธ เช•เชฐเซ€เชจเซ‡ เชชเชฐเชฟเชฃเชพเชฎ เช†เชชเซ‡ เช›เซ‡, เชคเซ‹ .NET เช†เชจเซ‡ เช‘เชชเซเชŸเชฟเชฎเชพเช‡เช เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชเช• เชธเชพเชงเชจ เชชเซ‚เชฐเซเช‚ เชชเชพเชกเซ‡ เช›เซ‡ - ValueTask เชฎเชพเชณเช–เซเช‚. เชคเซ‡เชจเซ‡ เชธเซเชชเชทเซเชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชšเชพเชฒเซ‹ เชคเซ‡เชจเชพ เช‰เชชเชฏเซ‹เช—เชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ เชœเซ‹เชˆเช: เชคเซเชฏเชพเช‚ เชเช• เช•เซ‡เชถ เช›เซ‡ เชœเซ‡ เช†เชชเชฃเซ‡ เช˜เชฃเซ€ เชตเชพเชฐ เชœเชˆเช เช›เซ€เช. เชคเซ‡เชฎเชพเช‚ เช•เซ‡เชŸเชฒเชพเช• เชฎเซ‚เชฒเซเชฏเซ‹ เช›เซ‡ เช…เชจเซ‡ เชชเช›เซ€ เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เชซเช•เซเชค เชชเชฐเชค เช•เชฐเซ€เช เช›เซ€เช; เชœเซ‹ เชจเชนเซ€เช‚, เชคเซ‹ เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เชฎเซ‡เชณเชตเชตเชพ เชฎเชพเชŸเซ‡ เช•เซ‡เชŸเชฒเชพเช• เชงเซ€เชฎเชพ IO เชชเชฐ เชœเชˆเช เช›เซ€เช. เชนเซเช‚ เชฌเชพเชฆเชฎเชพเช‚ เช…เชธเซเชฎเซ‡เชณ เชฐเซ€เชคเซ‡ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚, เชœเซ‡เชจเซ‹ เช…เชฐเซเชฅ เช›เซ‡ เช•เซ‡ เชธเชฎเช—เซเชฐ เชชเชฆเซเชงเชคเชฟ เช…เชธเซเชฎเซ‡เชณ เชนเซ‹เชตเชพเชจเซเช‚ เชฌเชนเชพเชฐ เช†เชตเซเชฏเซเช‚ เช›เซ‡. เช†เชฎ, เชชเชฆเซเชงเชคเชฟ เชฒเช–เชตเชพเชจเซ€ เชธเซเชชเชทเซเชŸ เชฐเซ€เชค เชจเซ€เชšเซ‡ เชฎเซเชœเชฌ เช›เซ‡:

public async Task<string> GetById(int id) {

    if (cache.TryGetValue(id, out string val))
        return val;
    return await RequestById(id);
}

เชฅเซ‹เชกเซเช‚ เช‘เชชเซเชŸเชฟเชฎเชพเช‡เช เช•เชฐเชตเชพเชจเซ€ เช‡เชšเซเช›เชพเชจเซ‡ เช•เชพเชฐเชฃเซ‡, เช…เชจเซ‡ เช† เช•เซ‹เชกเชจเซ‡ เช•เชฎเซเชชเชพเช‡เชฒ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชฐเซ‹เชเชฒเชฟเชจ เชถเซเช‚ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชถเซ‡ เชคเซ‡เชจเชพ เชธเชนเซ‡เชœ เชกเชฐเชจเซ‡ เช•เชพเชฐเชฃเซ‡, เชคเชฎเซ‡ เช† เช‰เชฆเชพเชนเชฐเชฃเชจเซ‡ เชจเซ€เชšเซ‡ เชชเซเชฐเชฎเชพเชฃเซ‡ เชซเชฐเซ€เชฅเซ€ เชฒเช–เซ€ เชถเช•เซ‹ เช›เซ‹:

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));
}

เชšเชพเชฒเซ‹ เช•เซ‹เชกเชจเชพ เช† เชญเชพเช— เชชเชฐ เชจเชœเซ€เช•เชฅเซ€ เชจเชœเชฐ เช•เชฐเซ€เช: เชœเซ‹ เช•เซ‡เชถเชฎเชพเช‚ เช•เซ‹เชˆ เชฎเซ‚เชฒเซเชฏ เชนเซ‹เชฏ, เชคเซ‹ เช…เชฎเซ‡ เชเช• เชฎเชพเชณเช–เซเช‚ เชฌเชจเชพเชตเซ€เช เช›เซ€เช, เช…เชจเซเชฏเชฅเชพ เชตเชพเชธเซเชคเชตเชฟเช• เช•เชพเชฐเซเชฏ เช…เชฐเซเชฅเชชเซ‚เชฐเซเชฃ เชเช•เชฎเชพเช‚ เช†เชตเชฐเชฟเชค เชฅเชˆ เชœเชถเซ‡. เช•เซ‰เชฒเชฟเช‚เช— เช•เซ‹เชก เช† เช•เซ‹เชกเชจเซ‡ เช•เชฏเชพ เชชเชพเชฅเชฎเชพเช‚ เชเช•เซเชเชฟเช•เซเชฏเซเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹ เชคเซ‡เชจเซ€ เชชเชฐเชตเชพ เช•เชฐเชคเซเช‚ เชจเชฅเซ€: ValueTask, C# เชธเชฟเชจเซเชŸเซ‡เช•เซเชธเชจเชพ เชฆเซƒเชทเซเชŸเชฟเช•เซ‹เชฃเชฅเซ€, เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เชจเชฟเชฏเชฎเชฟเชค เช•เชพเชฐเซเชฏ เชœเซ‡เชตเซเช‚ เชœ เชตเชฐเซเชคเชจ เช•เชฐเชถเซ‡.

TaskSchedulers: เชŸเชพเชธเซเช• เชฒเซ‹เช‚เชš เชตเซเชฏเซ‚เชนเชฐเชšเชจเชพเชจเซเช‚ เชธเช‚เชšเชพเชฒเชจ เช•เชฐเชตเซเช‚

เช†เช—เชพเชฎเซ€ API เช•เซ‡ เชœเซ‡ เชนเซเช‚ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ‡เชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚ เชคเซ‡ เชตเชฐเซเช— เช›เซ‡ เช•เชพเชฐเซเชฏ เช…เชจเซเชธเซ‚เชšเชฟ เช…เชจเซ‡ เชคเซ‡เชจเชพ เชกเซ‡เชฐเชฟเชตเซ‡เชŸเชฟเชตเซเช. เชฎเซ‡เช‚ เช‰เชชเชฐ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซเชฏเซ‹ เช›เซ‡ เช•เซ‡ TPL เชชเชพเชธเซ‡ เชธเชฎเช—เซเชฐ เชฅเซเชฐเซ‡เชกเซ‹ เชชเชฐ เช•เชพเชฐเซเชฏเซ‹เชจเซเช‚ เชตเชฟเชคเชฐเชฃ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชตเซเชฏเซ‚เชนเชฐเชšเชจเชพเช“เชจเซเช‚ เชธเช‚เชšเชพเชฒเชจ เช•เชฐเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ เช›เซ‡. เช†เชตเซ€ เชตเซเชฏเซ‚เชนเชฐเชšเชจเชพเช“ TaskScheduler เชตเชฐเซเช—เชจเชพ เชตเช‚เชถเชœเซ‹เชฎเชพเช‚ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡. เชคเชฎเชจเซ‡ เชœเชฐเซ‚เชฐ เชชเชกเซ€ เชถเช•เซ‡ เชคเซ‡เชตเซ€ เชฒเช—เชญเช— เช•เซ‹เชˆเชชเชฃ เชตเซเชฏเซ‚เชนเชฐเชšเชจเชพ เชชเซเชธเซเชคเช•เชพเชฒเชฏเชฎเชพเช‚ เชฎเชณเซ€ เชถเช•เซ‡ เช›เซ‡. เชธเชฎเชพเช‚เชคเชฐ เชเช•เซเชธเซเชŸเซ‡เชจเซเชถเชจเซเชธ เชเช•เซเชธเซเชŸเซเชฐเชพเช, เชฎเชพเช‡เช•เซเชฐเซ‹เชธเซ‹เชซเซเชŸ เชฆเซเชตเชพเชฐเชพ เชตเชฟเช•เชธเชฟเชค, เชชเชฐเช‚เชคเซ .NET เชจเซ‹ เชญเชพเช— เชจเชฅเซ€, เชชเชฐเช‚เชคเซ Nuget เชชเซ‡เช•เซ‡เชœ เชคเชฐเซ€เช•เซ‡ เชชเซ‚เชฐเชพ เชชเชพเชกเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เช›เซ‡. เชšเชพเชฒเซ‹ เชคเซ‡เชฎเชพเช‚เชฅเซ€ เช•เซ‡เชŸเชฒเชพเช•เชจเซ‡ เชธเช‚เช•เซเชทเชฟเชชเซเชคเชฎเชพเช‚ เชœเซ‹เชˆเช:

  • CurrentThreadTaskScheduler โ€” เชตเชฐเซเชคเชฎเชพเชจ เชฅเซเชฐเซ‡เชก เชชเชฐ เช•เชพเชฐเซเชฏเซ‹ เชšเชฒเชพเชตเซ‡ เช›เซ‡
  • เชฒเชฟเชฎเชฟเชŸเซ‡เชก เช•เชจเซเช•เชฐเชจเซเชธเซ€ เชฒเซ‡เชตเชฒ เชŸเชพเชธเซเช• เชถเซ‡เชกเซเชฏเซเชฒเชฐ โ€” เชชเชฐเชฟเชฎเชพเชฃ N เชฆเซเชตเชพเชฐเชพ เชตเชพเชฐเชพเชซเชฐเชคเซ€ เชšเชฒเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเชคเชพ เช•เชพเชฐเซเชฏเซ‹เชจเซ€ เชธเช‚เช–เซเชฏเชพเชจเซ‡ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เช•เชฐเซ‡ เช›เซ‡, เชœเซ‡ เช•เชจเซเชธเซเชŸเซเชฐเช•เซเชŸเชฐเชฎเชพเช‚ เชธเซเชตเซ€เช•เชพเชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.
  • เช“เชฐเซเชกเชฐ เช•เชฐเซ‡เชฒ เชŸเชพเชธเซเช• เชถเซ‡เชกเซเชฏเซเชฒเชฐ โ€” LimitedConcurrencyLevelTaskScheduler(1) เชคเชฐเซ€เช•เซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เชฅเชฏเซ‡เชฒ เช›เซ‡, เชคเซ‡เชฅเซ€ เช•เชพเชฐเซเชฏเซ‹ เช•เซเชฐเชฎเชฟเช• เชฐเซ€เชคเซ‡ เชšเชฒเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.
  • WorkStealingTaskScheduler - เช“เชœเชพเชฐเซ‹ เช•เชพเชฎเชจเซ€ เชšเซ‹เชฐเซ€ เช•เชพเชฐเซเชฏ เชตเชฟเชคเชฐเชฃ เชฎเชพเชŸเซ‡ เช…เชญเชฟเช—เชฎ. เช†เชตเชถเซเชฏเช•เชชเชฃเซ‡ เชคเซ‡ เชเช• เช…เชฒเช— เชฅเซเชฐเซ‡เชกเชชเซ‚เชฒ เช›เซ‡. เชธเชฎเชธเซเชฏเชพเชจเซเช‚ เชจเชฟเชฐเชพเช•เชฐเชฃ เช•เชฐเซ‡ เช›เซ‡ เช•เซ‡ .NET ThreadPool เชฎเชพเช‚ เชเช• เชธเซเชฅเชฟเชฐ เชตเชฐเซเช— เช›เซ‡, เชœเซ‡ เชฌเชงเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‹ เชฎเชพเชŸเซ‡ เชเช• เช›เซ‡, เชœเซ‡เชจเซ‹ เช…เชฐเซเชฅ เช›เซ‡ เช•เซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชจเชพ เชเช• เชญเชพเช—เชฎเชพเช‚ เชคเซ‡เชจเซ‹ เช“เชตเชฐเชฒเซ‹เชกเชฟเช‚เช— เช…เชฅเชตเชพ เช–เซ‹เชŸเซ‹ เช‰เชชเชฏเซ‹เช— เชฌเซ€เชœเชพ เชญเชพเช—เชฎเชพเช‚ เช†เชกเช…เชธเชฐเซ‹ เชคเชฐเชซ เชฆเซ‹เชฐเซ€ เชถเช•เซ‡ เช›เซ‡. เชคเชฆเซเชชเชฐเชพเช‚เชค, เช†เชตเซ€ เช–เชพเชฎเซ€เช“เชจเซเช‚ เช•เชพเชฐเชฃ เชธเชฎเชœเชตเซเช‚ เช…เชคเซเชฏเช‚เชค เชฎเซเชถเซเช•เซ‡เชฒ เช›เซ‡. เชคเซ‡. เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชจเชพ เชเชตเชพ เชญเชพเช—เซ‹เชฎเชพเช‚ เช…เชฒเช— เชตเชฐเซเช•เชธเซเชŸเซ‡เชฒเชฟเช‚เช— เชŸเชพเชธเซเช• เชถเซ‡เชกเซเชฏเซ‚เชฒเชฐเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเซ€ เชถเช•เซ‡ เช›เซ‡ เชœเซเชฏเชพเช‚ เชฅเซเชฐเซ‡เชกเชชเซเชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช†เช•เซเชฐเชฎเช• เช…เชจเซ‡ เช…เชฃเชงเชพเชฐเซ€ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡.
  • เช•เชคเชพเชฐเชฌเชฆเซเชงเชŸเชพเชธเซเช• เชถเซ‡เชกเซเชฏเซเชฒเชฐ โ€” เชคเชฎเชจเซ‡ เช…เช—เซเชฐเชคเชพ เช•เชคเชพเชฐเชจเชพ เชจเชฟเชฏเชฎเซ‹ เช…เชจเซเชธเชพเชฐ เช•เชพเชฐเซเชฏเซ‹ เช•เชฐเชตเชพ เชฆเซ‡ เช›เซ‡
  • ThreadPerTaskScheduler โ€” เชฆเชฐเซ‡เช• เช•เชพเชฐเซเชฏ เชฎเชพเชŸเซ‡ เชเช• เช…เชฒเช— เชฅเซเชฐเซ‡เชก เชฌเชจเชพเชตเซ‡ เช›เซ‡ เชœเซ‡ เชคเซ‡เชจเชพ เชชเชฐ เชšเชฒเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชเชตเชพ เช•เชพเชฐเซเชฏเซ‹ เชฎเชพเชŸเซ‡ เช‰เชชเชฏเซ‹เช—เซ€ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡ เชœเซ‡ เชชเซ‚เชฐเซเชฃ เชฅเชตเชพเชฎเชพเช‚ เช…เชฃเชงเชพเชฐเซ€ เชฐเซ€เชคเซ‡ เชฒเชพเช‚เชฌเซ‹ เชธเชฎเชฏ เชฒเซ‡ เช›เซ‡.

เชเช• เชธเชฐเชธ เชตเชฟเช—เชคเชตเชพเชฐ เช›เซ‡ เชฒเซ‡เช– เชฎเชพเช‡เช•เซเชฐเซ‹เชธเซ‹เชซเซเชŸ เชฌเซเชฒเซ‹เช— เชชเชฐ TaskSchedulers เชตเชฟเชถเซ‡.

Tasks เชฅเซ€ เชธเช‚เชฌเช‚เชงเชฟเชค เชฆเชฐเซ‡เช• เชตเชธเซเชคเซเชจเชพ เช…เชจเซเช•เซ‚เชณ เชกเซ€เชฌเช—เซ€เช‚เช— เชฎเชพเชŸเซ‡, เชตเชฟเชเซเชฏเซเช…เชฒ เชธเซเชŸเซเชกเชฟเชฏเซ‹ เชชเชพเชธเซ‡ Tasks เชตเชฟเชจเซเชกเซ‹ เช›เซ‡. เช† เชตเชฟเช‚เชกเซ‹เชฎเชพเช‚ เชคเชฎเซ‡ เช•เชพเชฐเซเชฏเชจเซ€ เชตเชฐเซเชคเชฎเชพเชจ เชธเซเชฅเชฟเชคเชฟ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹ เช…เชจเซ‡ เช•เซ‹เชกเชจเซ€ เชนเชพเชฒเชฎเชพเช‚ เชเช•เซเชเซ‡เช•เซเชฏเซเชŸเซ€เช‚เช— เชฒเชพเช‡เชจ เชชเชฐ เชœเชพเช“.

.NET: เชฎเชฒเซเชŸเชฟเชฅเซเชฐเซ‡เชกเซ€เช‚เช— เช…เชจเซ‡ เช…เชธเชฟเช‚เช•เซเชฐเซ‹เชจเซ€ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เชธเชพเชงเชจเซ‹. เชญเชพเช— 1

PLinq เช…เชจเซ‡ เชธเชฎเชพเช‚เชคเชฐ เชตเชฐเซเช—

Tasks เช…เชจเซ‡ เชคเซ‡เชฎเชจเชพ เชตเชฟเชถเซ‡ เชœเชฃเชพเชตเซ‡เชฒ เชฆเชฐเซ‡เช• เชตเชธเซเชคเซ เช‰เชชเชฐเชพเช‚เชค, .NET เชฎเชพเช‚ เชตเชงเซ เชฌเซ‡ เชฐเชธเชชเซเชฐเชฆ เชธเชพเชงเชจเซ‹ เช›เซ‡: PLinq (Linq2Parallel) เช…เชจเซ‡ เชธเชฎเชพเช‚เชคเชฐ เชตเชฐเซเช—. เชชเซเชฐเชฅเชฎ เชฌเชนเซเชตเชฟเชง เชฅเซเชฐเซ‡เชกเซ‹ เชชเชฐ เชคเชฎเชพเชฎ Linq เช•เชพเชฎเช—เซ€เชฐเซ€เชจเชพ เชธเชฎเชพเช‚เชคเชฐ เช…เชฎเชฒเชจเซเช‚ เชตเชšเชจ เช†เชชเซ‡ เช›เซ‡. เชฅเซเชฐเซ‡เชกเซ‹เชจเซ€ เชธเช‚เช–เซเชฏเชพ WithDegreeOfParallelism เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจ เชชเชฆเซเชงเชคเชฟเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช—เซ‹เช เชตเซ€ เชถเช•เชพเชฏ เช›เซ‡. เช•เชฎเชจเชธเซ€เชฌเซ‡, เชฎเซ‹เชŸเชพเชญเชพเช—เซ‡ เชคเซ‡เชจเชพ เชกเชฟเชซเซ‰เชฒเซเชŸ เชฎเซ‹เชกเชฎเชพเช‚ PLinq เชชเชพเชธเซ‡ เชคเชฎเชพเชฐเชพ เชกเซ‡เชŸเชพ เชธเซเชคเซเชฐเซ‹เชคเชจเชพ เช†เช‚เชคเชฐเชฟเช• เชตเชฟเชถเซ‡ เชชเซ‚เชฐเชคเซ€ เชฎเชพเชนเชฟเชคเซ€ เชจเชฅเซ€ เชนเซ‹เชคเซ€ เชœเซ‡เชฅเซ€ เช•เชฐเซ€เชจเซ‡ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชเชกเชช เชชเซเชฐเชพเชชเซเชค เช•เชฐเซ€ เชถเช•เชพเชฏ, เชฌเซ€เชœเซ€ เชคเชฐเชซ, เชชเซเชฐเชฏเชพเชธ เช•เชฐเชตเชพเชจเซ€ เช•เชฟเช‚เชฎเชค เช˜เชฃเซ€ เช“เช›เซ€ เชนเซ‹เชฏ เช›เซ‡: เชคเชฎเชพเชฐเซ‡ เชชเชนเซ‡เชฒเชพ AsParallel เชชเชฆเซเชงเชคเชฟเชจเซ‡ เช•เซ‰เชฒ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. Linq เชชเชฆเซเชงเชคเชฟเช“เชจเซ€ เชธเชพเช‚เช•เชณ เช…เชจเซ‡ เชชเซเชฐเชฆเชฐเซเชถเชจ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชšเชฒเชพเชตเซ‹. เชตเชงเซเชฎเชพเช‚, เชชเชพเชฐเซเชŸเซ€เชถเชจเซ‹ เชฎเชฟเช•เซ‡เชจเชฟเชเชฎเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชคเชฎเชพเชฐเชพ เชกเซ‡เชŸเชพ เชธเซเชคเซเชฐเซ‹เชคเชจเซ€ เชชเซเชฐเช•เซƒเชคเชฟ เชตเชฟเชถเซ‡ PLinq เชจเซ‡ เชตเชงเชพเชฐเชพเชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เชฎเซ‹เช•เชฒเชตเซ€ เชถเช•เซเชฏ เช›เซ‡. เชคเชฎเซ‡ เชตเชงเซ เชตเชพเช‚เชšเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชนเซ€เช‚ ะธ เช…เชนเซ€เช‚.

เชธเชฎเชพเช‚เชคเชฐ เชธเซเชŸเซ‡เชŸเชฟเช• เช•เซเชฒเชพเชธ เชธเชฎเชพเช‚เชคเชฐเชฎเชพเช‚ เชซเซ‹เชฐเซ‡เชš เช•เชฒเซ‡เช•เซเชถเชจ เชฆเซเชตเชพเชฐเชพ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เช•เชฐเชตเชพ, เชซเซ‹เชฐ เชฒเซ‚เชช เชšเชฒเชพเชตเชตเชพ เช…เชจเซ‡ เชธเชฎเชพเช‚เชคเชฐ เช‡เชจเซเชตเซ‹เช•เชฎเชพเช‚ เชฌเชนเซเชตเชฟเชง เชชเซเชฐเชคเชฟเชจเชฟเชงเชฟเช“เชจเซ‡ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชชเชฆเซเชงเชคเชฟเช“ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡. เช—เชฃเชคเชฐเซ€เช“ เชชเซ‚เชฐเซเชฃ เชจ เชฅเชพเชฏ เชคเซเชฏเชพเช‚ เชธเซเชงเซ€ เชตเชฐเซเชคเชฎเชพเชจ เชฅเซเชฐเซ‡เชกเชจเซเช‚ เช…เชฎเชฒเซ€เช•เชฐเชฃ เช…เชŸเช•เชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เช›เซ‡เชฒเซเชฒเซ€ เชฆเชฒเซ€เชฒ เชคเชฐเซ€เช•เซ‡ ParallelOptions เชชเชธเชพเชฐ เช•เชฐเซ€เชจเซ‡ เชฅเซเชฐเซ‡เชกเซ‹เชจเซ€ เชธเช‚เช–เซเชฏเชพ เช—เซ‹เช เชตเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชคเชฎเซ‡ เชตเชฟเช•เชฒเซเชชเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ TaskScheduler เช…เชจเซ‡ CancellationToken เชจเซ‹ เชชเชฃ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹.

เชคเชพเชฐเชฃเซ‹

เชœเซเชฏเชพเชฐเซ‡ เชฎเซ‡เช‚ เชฎเชพเชฐเชพ เช…เชนเซ‡เชตเชพเชฒเชจเซ€ เชธเชพเชฎเช—เซเชฐเซ€ เช…เชจเซ‡ เชคเซ‡เชจเชพ เชชเช›เซ€เชจเชพ เชฎเชพเชฐเชพ เช•เชพเชฐเซเชฏ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชฎเซ‡เช‚ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเซ‡เชฒเซ€ เชฎเชพเชนเชฟเชคเซ€เชจเชพ เช†เชงเชพเชฐเซ‡ เช† เชฒเซ‡เช– เชฒเช–เชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซเชฏเซเช‚, เชคเซเชฏเชพเชฐเซ‡ เชฎเชจเซ‡ เช†เชถเชพ เชจเชนเซ‹เชคเซ€ เช•เซ‡ เชคเซ‡เชฎเชพเช‚ เช†เชŸเชฒเซเช‚ เชฌเชงเซเช‚ เชนเชถเซ‡. เชนเชตเซ‡, เชœเซเชฏเชพเชฐเซ‡ เชŸเซ‡เช•เซเชธเซเชŸ เชเชกเชฟเชŸเชฐ เช•เซ‡ เชœเซ‡เชฎเชพเช‚ เชนเซเช‚ เช† เชฒเซ‡เช– เชฒเช–เซ€ เชฐเชนเซเชฏเซ‹ เช›เซเช‚ เชคเซ‡ เชจเชฟเช‚เชฆเชพเชชเซ‚เชฐเซเชตเช• เชฎเชจเซ‡ เช•เชนเซ‡ เช›เซ‡ เช•เซ‡ เชชเซƒเชทเซเช  15 เช—เชฏเซเช‚ เช›เซ‡, เชนเซเช‚ เชตเชšเช—เชพเชณเชพเชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชจเซ‹ เชธเชพเชฐเชพเช‚เชถ เช†เชชเซ€เชถ. เช…เชจเซเชฏ เชฏเซเช•เซเชคเชฟเช“, APIs, เชตเชฟเชเซเชฏเซเช…เชฒ เชŸเซ‚เชฒเซเชธ เช…เชจเซ‡ เชฎเซเชถเซเช•เซ‡เชฒเซ€เช“ เช†เช—เชพเชฎเซ€ เชฒเซ‡เช–เชฎเชพเช‚ เช†เชตเชฐเซ€ เชฒเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

เชคเชพเชฐเชฃเซ‹:

  • เช†เชงเซเชจเชฟเช• เชชเซ€เชธเซ€เชจเชพ เชธเช‚เชธเชพเชงเชจเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฐเซ‡ เชฅเซเชฐเซ‡เชกเซ‹, เช…เชธเซเชฎเซ‡เชณ เช…เชจเซ‡ เชธเชฎเชพเชจเชคเชพ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เชธเชพเชงเชจเซ‹ เชœเชพเชฃเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.
  • เช† เชนเซ‡เชคเซเช“ เชฎเชพเชŸเซ‡ .NET เชชเชพเชธเซ‡ เช˜เชฃเชพเช‚ เชตเชฟเชตเชฟเชง เชธเชพเชงเชจเซ‹ เช›เซ‡
  • เชคเซ‡ เชฌเชงเชพ เชเช• เชœ เชธเชฎเชฏเซ‡ เชฆเซ‡เช–เชพเชฏเชพ เชจเชฅเซ€, เชคเซ‡เชฅเซ€ เชคเชฎเซ‡ เชตเชพเชฐเช‚เชตเชพเชฐ เชฒเซ‡เช—เชธเซ€ เชถเซ‹เชงเซ€ เชถเช•เซ‹ เช›เซ‹, เชœเซ‹ เช•เซ‡, เช˜เชฃเชพ เชชเซเชฐเชฏเชคเซเชจเซ‹ เชตเชฟเชจเชพ เชœเซ‚เชจเชพ API เชจเซ‡ เช•เชจเซเชตเชฐเซเชŸ เช•เชฐเชตเชพเชจเซ€ เชฐเซ€เชคเซ‹ เช›เซ‡.
  • .NET เชฎเชพเช‚ เชฅเซเชฐเซ‡เชกเซ‹ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเซเช‚ เช เชฅเซเชฐเซ‡เชก เช…เชจเซ‡ เชฅเซเชฐเซ‡เชกเชชเซ‚เชฒ เชตเชฐเซเช—เซ‹ เชฆเซเชตเชพเชฐเชพ เชฐเชœเซ‚ เชฅเชพเชฏ เช›เซ‡
  • Thread.Abort, Thread.Interrupt เช…เชจเซ‡ Win32 API TerminateThread เชชเชฆเซเชงเชคเชฟเช“ เช–เชคเชฐเชจเชพเช• เช›เซ‡ เช…เชจเซ‡ เช‰เชชเชฏเซ‹เช— เชฎเชพเชŸเซ‡ เชญเชฒเชพเชฎเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชคเซ€ เชจเชฅเซ€. เชคเซ‡เชจเชพ เชฌเชฆเชฒเซ‡, เช•เซ‡เชจเซเชธเชฒเซ‡เชถเชจ เชŸเซ‹เช•เชจ เชฎเชฟเช•เซ‡เชจเชฟเชเชฎเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชตเชงเซ เชธเชพเชฐเซเช‚ เช›เซ‡
  • เชชเซเชฐเชตเชพเชน เช เชเช• เชฎเซ‚เชฒเซเชฏเชตเชพเชจ เชธเช‚เชธเชพเชงเชจ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‹ เชชเซเชฐเชตเช เซ‹ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เช›เซ‡. เช˜เชŸเชจเชพเช“เชจเซ€ เชฐเชพเชน เชœเซ‹เชตเชพเชฎเชพเช‚ เชฅเซเชฐเซ‡เชกเซ‹ เชตเซเชฏเชธเซเชค เชนเซ‹เชฏ เชคเซ‡เชตเซ€ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเช“ เชŸเชพเชณเชตเซ€ เชœเซ‹เชˆเช. เช† เชฎเชพเชŸเซ‡ TaskCompletionSource เชตเชฐเซเช—เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เช…เชจเซเช•เซ‚เชณ เช›เซ‡
  • เชธเชฎเชพเชจเชคเชพ เช…เชจเซ‡ เช…เชธเซเชฎเซ‡เชณ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เชธเซŒเชฅเซ€ เชถเช•เซเชคเชฟเชถเชพเชณเซ€ เช…เชจเซ‡ เช…เชฆเซเชฏเชคเชจ .NET เชŸเซ‚เชฒเซเชธ เช›เซ‡ Tasks.
  • c# async/await เช“เชชเชฐเซ‡เชŸเชฐเซ‹ เชจเซ‹เชจ-เชฌเซเชฒเซ‹เช•เซ€เช‚เช— เชตเซ‡เชˆเชŸเชจเซ‹ เช–เซเชฏเชพเชฒ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เซ‡ เช›เซ‡
  • เชคเชฎเซ‡ TaskScheduler เชฆเซเชตเชพเชฐเชพ เชฎเซ‡เชณเชตเซ‡เชฒเชพ เชตเชฐเซเช—เซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเชฎเช—เซเชฐ เชฅเซเชฐเซ‡เชกเซ‹เชฎเชพเช‚ Tasksเชจเชพ เชตเชฟเชคเชฐเชฃเชจเซ‡ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹
  • ValueTask เชฎเชพเชณเช–เซเช‚ เชนเซ‹เชŸ-เชชเชพเชฅ เช…เชจเซ‡ เชฎเซ‡เชฎเชฐเซ€-เชŸเซเชฐเชพเชซเชฟเช•เชจเซ‡ เช‘เชชเซเชŸเชฟเชฎเชพเช‡เช เช•เชฐเชตเชพเชฎเชพเช‚ เช‰เชชเชฏเซ‹เช—เซ€ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡
  • เชตเชฟเชเซเชฏเซเช…เชฒ เชธเซเชŸเซเชกเชฟเชฏเซ‹เชจเชพ เช•เชพเชฐเซเชฏเซ‹ เช…เชจเซ‡ เชฅเซเชฐเซ‡เชกเซเชธ เชตเชฟเชจเซเชกเซ‹ เชฎเชฒเซเชŸเซ€-เชฅเซเชฐเซ‡เชกเซ‡เชก เช…เชฅเชตเชพ เช…เชธเซเชฎเซ‡เชณ เช•เซ‹เชกเชจเซ‡ เชกเชฟเชฌเช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช˜เชฃเซ€ เชฌเชงเซ€ เช‰เชชเชฏเซ‹เช—เซ€ เชฎเชพเชนเชฟเชคเซ€ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡.
  • PLinq เช เชเช• เชธเชฐเชธ เชธเชพเชงเชจ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡เชฎเชพเช‚ เชคเชฎเชพเชฐเชพ เชกเซ‡เชŸเชพ เชธเซเชคเซเชฐเซ‹เชค เชตเชฟเชถเซ‡ เชชเซ‚เชฐเชคเซ€ เชฎเชพเชนเชฟเชคเซ€ เชจ เชนเซ‹เชˆ เชถเช•เซ‡, เชชเชฐเช‚เชคเซ เชชเชพเชฐเซเชŸเซ€เชถเชจเซ€เช‚เช— เชฎเชฟเช•เซ‡เชจเชฟเชเชฎเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชคเซ‡เชจเซ‡ เช เซ€เช• เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡.
  • เชšเชพเชฒเซ เชฐเชนเซ€ เชถเช•เชพเชฏโ€ฆ

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹