.NET: āĻŽāĻžāĻ˛ā§āĻŸāĻŋāĻĨā§āĻ°ā§‡āĻĄāĻŋāĻ‚ āĻāĻŦāĻ‚ āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻŸā§āĻ˛āĨ¤ āĻ…āĻ‚āĻļ 1

āĻ†āĻŽāĻŋ āĻšāĻžāĻŦāĻ°ā§‡āĻ° āĻŽā§‚āĻ˛ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋ āĻĒā§āĻ°āĻ•āĻžāĻļ āĻ•āĻ°āĻ›āĻŋ, āĻ¯āĻžāĻ° āĻ…āĻ¨ā§āĻŦāĻžāĻĻ āĻ•āĻ°ā§āĻĒā§‹āĻ°ā§‡āĻŸā§‡ āĻĒā§‹āĻ¸ā§āĻŸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻŦā§āĻ˛āĻ— āĻĒā§‹āĻ¸ā§āĻŸ.

āĻāĻ–āĻžāĻ¨ā§‡ āĻāĻŦāĻ‚ āĻāĻ–āĻ¨ āĻĢāĻ˛āĻžāĻĢāĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ¨āĻž āĻ•āĻ°ā§‡ āĻ…āĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸āĻ­āĻžāĻŦā§‡ āĻ•āĻŋāĻ›ā§ āĻ•āĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻŦāĻž āĻāĻŸāĻŋ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨āĻ•āĻžāĻ°ā§€ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻ‡āĻ‰āĻ¨āĻŋāĻŸā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻŦāĻĄāĻŧ āĻ•āĻžāĻœ āĻ­āĻžāĻ— āĻ•āĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸāĻžāĻ°ā§‡āĻ° āĻ†āĻŦāĻŋāĻ°ā§āĻ­āĻžāĻŦā§‡āĻ° āĻ†āĻ—ā§‡ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻ›āĻŋāĻ˛āĨ¤ āĻ¤āĻžāĻĻā§‡āĻ° āĻ†āĻŦāĻŋāĻ°ā§āĻ­āĻžāĻŦā§‡āĻ° āĻ¸āĻžāĻĨā§‡, āĻāĻ‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨āĻŸāĻŋ āĻ–ā§āĻŦ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦ āĻšāĻ¯āĻŧā§‡ āĻ“āĻ ā§‡āĨ¤ āĻāĻ–āĻ¨, 2019 āĻ¸āĻžāĻ˛ā§‡, āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ 8-āĻ•ā§‹āĻ° āĻ‡āĻ¨ā§āĻŸā§‡āĻ˛ āĻ•ā§‹āĻ° āĻĒā§āĻ°āĻ¸ā§‡āĻ¸āĻ° āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻ˛ā§āĻ¯āĻžāĻĒāĻŸāĻĒā§‡ āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋ āĻŸāĻžāĻ‡āĻĒ āĻ•āĻ°āĻ›āĻŋ, āĻ¯āĻžāĻ° āĻ‰āĻĒāĻ° āĻāĻ•āĻļā§‹āĻ°āĻ“ āĻŦā§‡āĻļāĻŋ āĻĒā§āĻ°āĻ¸ā§‡āĻ¸ āĻ¸āĻŽāĻžāĻ¨ā§āĻ¤āĻ°āĻžāĻ˛āĻ­āĻžāĻŦā§‡ āĻšāĻ˛āĻ›ā§‡, āĻāĻŽāĻ¨āĻ•āĻŋ āĻ†āĻ°āĻ“ āĻŦā§‡āĻļāĻŋ āĻĨā§āĻ°ā§‡āĻĄāĨ¤ āĻ•āĻžāĻ›āĻžāĻ•āĻžāĻ›āĻŋ, āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻŽāĻžāĻ¨ā§āĻ¯ āĻœāĻ°ā§āĻœāĻ°āĻŋāĻ¤ āĻĢā§‹āĻ¨ āĻ†āĻ›ā§‡, āĻ•āĻ¯āĻŧā§‡āĻ• āĻŦāĻ›āĻ° āĻ†āĻ—ā§‡ āĻ•ā§‡āĻ¨āĻž, āĻāĻŸāĻŋ āĻŦā§‹āĻ°ā§āĻĄā§‡ āĻāĻ•āĻŸāĻŋ 8-āĻ•ā§‹āĻ° āĻĒā§āĻ°āĻ¸ā§‡āĻ¸āĻ° āĻ†āĻ›ā§‡āĨ¤ āĻĨāĻŋāĻŽā§āĻ¯āĻžāĻŸāĻŋāĻ• āĻ¸āĻ‚āĻ¸ā§āĻĨāĻžāĻ¨āĻ—ā§āĻ˛āĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ āĻāĻŦāĻ‚ āĻ­āĻŋāĻĄāĻŋāĻ“āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻĒā§‚āĻ°ā§āĻŖ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻ˛ā§‡āĻ–āĻ•āĻ°āĻž āĻāĻ‡ āĻŦāĻ›āĻ°ā§‡āĻ° āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻļāĻŋāĻĒ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸāĻĢā§‹āĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻĒā§āĻ°āĻļāĻ‚āĻ¸āĻž āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨ āĻ¯ā§‡āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ 16-āĻ•ā§‹āĻ° āĻĒā§āĻ°āĻ¸ā§‡āĻ¸āĻ° āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ā§ˇ MS Azure āĻāĻ•āĻŸāĻŋ 20 āĻ•ā§‹āĻ° āĻĒā§āĻ°āĻ¸ā§‡āĻ¸āĻ° āĻāĻŦāĻ‚ 128 TB RAM āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§‡āĻļāĻŋāĻ¨ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡ āĻ¯āĻž $2/āĻ˜āĻ¨ā§āĻŸāĻžāĻ°āĻ“ āĻ•āĻŽ āĻ–āĻ°āĻšā§‡āĨ¤ āĻĻā§āĻ°ā§āĻ­āĻžāĻ—ā§āĻ¯āĻŦāĻļāĻ¤, āĻĨā§āĻ°ā§‡āĻĄā§‡āĻ° āĻŽāĻŋāĻĨāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻž āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻ¨āĻž āĻšāĻ¯āĻŧā§‡ āĻ¸āĻ°ā§āĻŦā§‹āĻšā§āĻšāĻŸāĻŋ āĻŦā§‡āĻ° āĻ•āĻ°āĻž āĻāĻŦāĻ‚ āĻāĻ‡ āĻļāĻ•ā§āĻ¤āĻŋāĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ…āĻ¸āĻŽā§āĻ­āĻŦāĨ¤

āĻĒāĻ°āĻŋāĻ­āĻžāĻˇāĻž

āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž - OS āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸ, āĻŦāĻŋāĻšā§āĻ›āĻŋāĻ¨ā§āĻ¨ āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻ¸ā§āĻĨāĻžāĻ¨, āĻĨā§āĻ°ā§‡āĻĄ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤
āĻĨā§āĻ°ā§‡āĻĄ - āĻāĻ•āĻŸāĻŋ OS āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸ, āĻāĻ•ā§āĻ¸āĻŋāĻ•āĻŋāĻ‰āĻļāĻ¨ā§‡āĻ° āĻ•ā§āĻˇā§āĻĻā§āĻ°āĻ¤āĻŽ āĻāĻ•āĻ•, āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻ…āĻ‚āĻļ, āĻĨā§āĻ°ā§‡āĻĄāĻ—ā§āĻ˛āĻŋ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ¨āĻŋāĻœā§‡āĻĻā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻŽā§‡āĻŽāĻ°āĻŋ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻžāĻ¨ āĻ­āĻžāĻ— āĻ•āĻ°ā§‡ āĻ¨ā§‡āĻ¯āĻŧāĨ¤
āĻŽāĻžāĻ˛ā§āĻŸāĻŋāĻŸāĻžāĻ¸ā§āĻ•āĻŋāĻ‚ - OS āĻ¸āĻŽā§āĻĒāĻ¤ā§āĻ¤āĻŋ, āĻāĻ•āĻ¯ā§‹āĻ—ā§‡ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻ•ā§āĻˇāĻŽāĻ¤āĻž
āĻŽāĻžāĻ˛ā§āĻŸāĻŋ-āĻ•ā§‹āĻ° - āĻĒā§āĻ°āĻ¸ā§‡āĻ¸āĻ°ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽā§āĻĒāĻ¤ā§āĻ¤āĻŋ, āĻĄā§‡āĻŸāĻž āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ°āĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ•ā§‹āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ•ā§āĻˇāĻŽāĻ¤āĻž
āĻŽāĻžāĻ˛ā§āĻŸāĻŋāĻĒā§āĻ°āĻ¸ā§‡āĻ¸āĻŋāĻ‚ - āĻāĻ•āĻŸāĻŋ āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸāĻžāĻ°ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽā§āĻĒāĻ¤ā§āĻ¤āĻŋ, āĻļāĻžāĻ°ā§€āĻ°āĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻĒā§āĻ°āĻ¸ā§‡āĻ¸āĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻ•ā§āĻˇāĻŽāĻ¤āĻž
āĻŽāĻžāĻ˛ā§āĻŸāĻŋāĻĨā§āĻ°ā§‡āĻĄāĻŋāĻ‚ — āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯, āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻĨā§āĻ°ā§‡āĻĄā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻĄā§‡āĻŸāĻž āĻĒā§āĻ°āĻ¸ā§‡āĻ¸āĻŋāĻ‚ āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻ•āĻ°āĻžāĻ° āĻ•ā§āĻˇāĻŽāĻ¤āĻžāĨ¤
āĻ¸āĻŽāĻžāĻ¨ā§āĻ¤āĻ°āĻžāĻ˛āĻ¤āĻž - āĻ¸āĻŽāĻ¯āĻŧā§‡āĻ° āĻāĻ•āĻ• āĻĒā§āĻ°āĻ¤āĻŋ āĻļāĻžāĻ°ā§€āĻ°āĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻāĻ•āĻ¯ā§‹āĻ—ā§‡ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻ•āĻ°āĻž
āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻŋ — āĻāĻ‡ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ°āĻŖā§‡āĻ° āĻ¸āĻŽāĻžāĻĒā§āĻ¤āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ¨āĻž āĻ•āĻ°ā§‡āĻ‡ āĻāĻ•āĻŸāĻŋ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨; āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ā§‡āĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĒāĻ°ā§‡ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

āĻ°ā§āĻĒāĻ•

āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸āĻ‚āĻœā§āĻžāĻž āĻ­āĻžāĻ˛ āĻ¨āĻ¯āĻŧ āĻāĻŦāĻ‚ āĻ•āĻŋāĻ›ā§ āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻŦā§āĻ¯āĻžāĻ–ā§āĻ¯āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨, āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻŋ āĻ†āĻ¨ā§āĻˇā§āĻ āĻžāĻ¨āĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻĒā§āĻ°āĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻĒāĻ°āĻŋāĻ­āĻžāĻˇāĻžāĻ¯āĻŧ āĻĒā§āĻ°āĻžāĻ¤āĻƒāĻ°āĻžāĻļ āĻ°āĻžāĻ¨ā§āĻ¨āĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ°ā§‚āĻĒāĻ• āĻ¯ā§‹āĻ— āĻ•āĻ°āĻŦāĨ¤ āĻāĻ‡ āĻ°ā§‚āĻĒāĻ•āĻŸāĻŋāĻ¤ā§‡ āĻ¨āĻžāĻ¸ā§āĻ¤āĻž āĻ°āĻžāĻ¨ā§āĻ¨āĻž āĻ•āĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĨ¤

āĻ¸āĻ•āĻžāĻ˛ā§‡ āĻ¨āĻžāĻ¸ā§āĻ¤āĻž āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ†āĻŽāĻŋ (āĻ¸āĻŋāĻĒāĻŋāĻ‡āĻ‰āĻ†āĻŽāĻŋ āĻ°āĻžāĻ¨ā§āĻ¨āĻžāĻ˜āĻ°ā§‡ āĻ†āĻ¸āĻŋ (āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸāĻžāĻ°) āĻ†āĻŽāĻžāĻ° 2 āĻšāĻžāĻ¤ āĻ†āĻ›ā§‡ (āĻ•ā§‹āĻ°) āĻ°āĻžāĻ¨ā§āĻ¨āĻžāĻ˜āĻ°ā§‡ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻĄāĻŋāĻ­āĻžāĻ‡āĻ¸ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ (IO): āĻšā§āĻ˛āĻž, āĻ•ā§‡āĻŸāĻ˛āĻŋ, āĻŸā§‹āĻ¸ā§āĻŸāĻžāĻ°, āĻ°ā§‡āĻĢā§āĻ°āĻŋāĻœāĻžāĻ°ā§‡āĻŸāĻ°āĨ¤ āĻ†āĻŽāĻŋ āĻ—ā§āĻ¯āĻžāĻ¸ āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻŋ, āĻāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻĢā§āĻ°āĻžāĻ‡āĻ‚ āĻĒā§āĻ¯āĻžāĻ¨ āĻ°āĻžāĻ–āĻŋ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ—āĻ°āĻŽ āĻšāĻ“āĻ¯āĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ¨āĻž āĻ•āĻ°ā§‡ āĻāĻ¤ā§‡ āĻ¤ā§‡āĻ˛ āĻĸā§‡āĻ˛ā§‡ āĻĻāĻŋāĻ‡ (āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸āĻ­āĻžāĻŦā§‡, āĻ¨āĻ¨-āĻŦā§āĻ˛āĻ•āĻŋāĻ‚-āĻ†āĻ‡āĻ“-āĻ“āĻ¯āĻŧā§‡āĻŸ), āĻ†āĻŽāĻŋ āĻ°ā§‡āĻĢā§āĻ°āĻŋāĻœāĻžāĻ°ā§‡āĻŸāĻ° āĻĨā§‡āĻ•ā§‡ āĻĄāĻŋāĻŽ āĻŦā§‡āĻ° āĻ•āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ˛ā§‡āĻŸā§‡ āĻ­ā§‡āĻ™ā§āĻ—ā§‡ āĻĢā§‡āĻ˛āĻŋ, āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻ• āĻšāĻžāĻ¤ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻĒāĻŋāĻŸāĻŋāĻ¯āĻŧā§‡ āĻĢā§‡āĻ˛āĻŋ (āĻĨā§āĻ°ā§‡āĻĄ # 1), āĻāĻŦāĻ‚ āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧ (āĻĨā§āĻ°ā§‡āĻĄ # 2) āĻĒā§āĻ˛ā§‡āĻŸ āĻ§āĻ°ā§‡ āĻ°āĻžāĻ–āĻž (āĻļā§‡āĻ¯āĻŧāĻžāĻ°āĻĄ āĻ°āĻŋāĻ¸ā§‹āĻ°ā§āĻ¸)āĨ¤ āĻāĻ–āĻ¨ āĻ†āĻŽāĻŋ āĻ•ā§‡āĻŸāĻ˛āĻŋ āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ†āĻŽāĻžāĻ° āĻ¯āĻĨā§‡āĻˇā§āĻŸ āĻšāĻžāĻ¤ āĻ¨ā§‡āĻ‡ (āĻĨā§āĻ°ā§‡āĻĄ āĻ…āĻ¨āĻžāĻšāĻžāĻ°) āĻāĻ‡ āĻ¸āĻŽāĻ¯āĻŧā§‡, āĻĢā§āĻ°āĻžāĻ‡āĻ‚ āĻĒā§āĻ¯āĻžāĻ¨ āĻ—āĻ°āĻŽ āĻšāĻ¯āĻŧā§‡ āĻ¯āĻžāĻ¯āĻŧ (āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ°āĻŖ) āĻ¯āĻžāĻ¤ā§‡ āĻ†āĻŽāĻŋ āĻ¯āĻž āĻšāĻžāĻŦā§āĻ• āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›āĻŋ āĻ¤āĻž āĻĸā§‡āĻ˛ā§‡ āĻĻāĻŋāĻ‡āĨ¤ āĻ†āĻŽāĻŋ āĻ•ā§‡āĻŸāĻ˛āĻŋāĻ° āĻ•āĻžāĻ›ā§‡ āĻĒā§ŒāĻāĻ›āĻžāĻ‡ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻŋ āĻāĻŦāĻ‚ āĻŦā§‹āĻ•āĻžāĻ° āĻŽāĻ¤ā§‹ āĻāĻ¤ā§‡ āĻĒāĻžāĻ¨āĻŋ āĻĢā§āĻŸāĻ¤ā§‡ āĻĻā§‡āĻ–āĻŋ (āĻŦā§āĻ˛āĻ•āĻŋāĻ‚-āĻ†āĻ‡āĻ“-āĻ“āĻ¯āĻŧā§‡āĻŸ), āĻ¯āĻĻāĻŋāĻ“ āĻāĻ‡ āĻ¸āĻŽāĻ¯āĻŧā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ¤āĻŋāĻ¨āĻŋ āĻĒā§āĻ˛ā§‡āĻŸāĻŸāĻŋ āĻ§ā§āĻ¯āĻŧā§‡ āĻĢā§‡āĻ˛āĻ¤ā§‡ āĻĒāĻžāĻ°āĻ¤ā§‡āĻ¨ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ¤āĻŋāĻ¨āĻŋ āĻ…āĻŽāĻ˛ā§‡āĻŸāĻŸāĻŋ āĻšāĻžāĻŦā§āĻ• āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ā§‡āĻ¨āĨ¤

āĻ†āĻŽāĻŋ āĻŽāĻžāĻ¤ā§āĻ° 2 āĻšāĻžāĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻ…āĻŽāĻ˛ā§‡āĻŸ āĻ°āĻžāĻ¨ā§āĻ¨āĻž āĻ•āĻ°ā§‡āĻ›āĻŋ, āĻāĻŦāĻ‚ āĻ†āĻŽāĻžāĻ° āĻ•āĻžāĻ›ā§‡ āĻāĻ° āĻŦā§‡āĻļāĻŋ āĻ¨ā§‡āĻ‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ•āĻ‡ āĻ¸āĻŽāĻ¯āĻŧā§‡, āĻ…āĻŽāĻ˛ā§‡āĻŸ āĻšāĻžāĻŦā§āĻ• āĻŽāĻžāĻ°āĻžāĻ° āĻŽā§āĻšā§āĻ°ā§āĻ¤ā§‡, āĻāĻ•āĻŦāĻžāĻ°ā§‡ 3āĻŸāĻŋ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛: āĻ…āĻŽāĻ˛ā§‡āĻŸāĻŸāĻŋ āĻšāĻžāĻŦā§āĻ• āĻŽāĻžāĻ°āĻž, āĻĒā§āĻ˛ā§‡āĻŸāĻŸāĻŋ āĻ§āĻ°ā§‡ āĻ°āĻžāĻ–āĻž, āĻĢā§āĻ°āĻžāĻ‡āĻ‚ āĻĒā§āĻ¯āĻžāĻ¨ āĻ—āĻ°āĻŽ āĻ•āĻ°āĻž āĻ¸āĻŋāĻĒāĻŋāĻ‡āĻ‰ āĻšāĻ˛ āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸāĻžāĻ°ā§‡āĻ° āĻĻā§āĻ°ā§āĻ¤āĻ¤āĻŽ āĻ…āĻ‚āĻļ, IO āĻšāĻ˛ āĻ¯āĻž āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ‡ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ§ā§€āĻ° āĻšāĻ¯āĻŧā§‡ āĻ¯āĻžāĻ¯āĻŧ, āĻ¤āĻžāĻ‡ āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻ‡ āĻāĻ•āĻŸāĻŋ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻšāĻ˛ IO āĻĨā§‡āĻ•ā§‡ āĻĄā§‡āĻŸāĻž āĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ•āĻŋāĻ›ā§ āĻĻāĻŋāĻ¯āĻŧā§‡ CPU āĻĻāĻ–āĻ˛ āĻ•āĻ°āĻžāĨ¤

āĻ°ā§‚āĻĒāĻ• āĻšāĻžāĻ˛āĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻ“āĻ¯āĻŧāĻž:

  • āĻ¯āĻĻāĻŋ āĻāĻ•āĻŸāĻŋ āĻ…āĻŽāĻ˛ā§‡āĻŸ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻ•āĻ°āĻžāĻ° āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§‡, āĻ†āĻŽāĻŋ āĻœāĻžāĻŽāĻžāĻ•āĻžāĻĒāĻĄāĻŧ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻŦ, āĻāĻŸāĻŋ āĻŽāĻžāĻ˛ā§āĻŸāĻŋāĻŸāĻžāĻ¸ā§āĻ•āĻŋāĻ‚āĻ¯āĻŧā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻšāĻŦā§‡āĨ¤ āĻāĻ•āĻŸāĻŋ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻ¸ā§‚āĻ•ā§āĻˇā§āĻŽāĻ¤āĻž: āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸāĻžāĻ°āĻ—ā§āĻ˛āĻŋ āĻŽāĻžāĻ¨ā§āĻˇā§‡āĻ° āĻ¤ā§āĻ˛āĻ¨āĻžāĻ¯āĻŧ āĻāĻ¤ā§‡ āĻ…āĻ¨ā§‡āĻ• āĻ­āĻžāĻ˛āĨ¤
  • āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻļā§‡āĻĢ āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻ°āĻžāĻ¨ā§āĻ¨āĻžāĻ˜āĻ°, āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ āĻāĻ•āĻŸāĻŋ āĻ°ā§‡āĻ¸ā§āĻŸā§āĻ°ā§‡āĻ¨ā§āĻŸā§‡ - āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ˛ā§āĻŸāĻŋ-āĻ•ā§‹āĻ° āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸāĻžāĻ°āĨ¤
  • āĻ…āĻ¨ā§‡āĻ• āĻ°ā§‡āĻ¸ā§āĻŸā§āĻ°ā§‡āĻ¨ā§āĻŸā§‡ āĻĢā§āĻĄ āĻ•ā§‹āĻ°ā§āĻŸā§‡ āĻļāĻĒāĻŋāĻ‚ āĻ¸ā§‡āĻ¨ā§āĻŸāĻžāĻ°-āĻĄāĻžāĻŸāĻž āĻ¸ā§‡āĻ¨ā§āĻŸāĻžāĻ°

.NET āĻŸā§āĻ˛āĻ¸

.NET āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ…āĻ¨ā§‡āĻ• āĻœāĻŋāĻ¨āĻŋāĻ¸ā§‡āĻ° āĻŽāĻ¤ā§‹ āĻĨā§āĻ°ā§‡āĻĄā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻ¤ā§‡ āĻ­āĻžāĻ˛ā§‹āĨ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖā§‡āĻ° āĻ¸āĻžāĻĨā§‡, āĻāĻŸāĻŋ āĻ¤āĻžāĻĻā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻ°āĻ“ āĻŦā§‡āĻļāĻŋ āĻŦā§‡āĻļāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ¸āĻ°āĻžā§āĻœāĻžāĻŽ, OS āĻĨā§āĻ°ā§‡āĻĄāĻ—ā§āĻ˛āĻŋāĻ° āĻ‰āĻĒāĻ° āĻŦāĻŋāĻŽā§‚āĻ°ā§āĻ¤āĻ¤āĻžāĻ° āĻ¨āĻ¤ā§āĻ¨ āĻ¸ā§āĻ¤āĻ°āĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°āĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻŦāĻŋāĻŽā§‚āĻ°ā§āĻ¤āĻ¤āĻž āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€āĻ°āĻž āĻāĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ¯āĻž āĻāĻ•āĻŸāĻŋ āĻ‰āĻšā§āĻš-āĻ¸ā§āĻ¤āĻ°ā§‡āĻ° āĻŦāĻŋāĻŽā§‚āĻ°ā§āĻ¤āĻ¤āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻāĻ• āĻŦāĻž āĻāĻ•āĻžāĻ§āĻŋāĻ• āĻ¸ā§āĻ¤āĻ°ā§‡āĻ° āĻ¨ā§€āĻšā§‡ āĻ¯āĻžāĻ“āĻ¯āĻŧāĻžāĻ° āĻ¸ā§āĻ¯ā§‹āĻ— āĻ›ā§‡āĻĄāĻŧā§‡ āĻĻā§‡āĻ¯āĻŧāĨ¤ āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ‡ āĻāĻŸāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ¨āĻ¯āĻŧ, āĻ†āĻ¸āĻ˛ā§‡ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻļāĻŸāĻ—āĻžāĻ¨ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ¨āĻŋāĻœā§‡āĻ° āĻĒāĻžāĻ¯āĻŧā§‡ āĻ—ā§āĻ˛āĻŋ āĻ•āĻ°āĻžāĻ° āĻĻāĻ°āĻœāĻž āĻ–ā§āĻ˛ā§‡ āĻĻā§‡āĻ¯āĻŧ, āĻ¤āĻŦā§‡ āĻ•āĻ–āĻ¨āĻ“ āĻ•āĻ–āĻ¨āĻ“, āĻŦāĻŋāĻ°āĻ˛ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡, āĻāĻŸāĻŋ āĻāĻŽāĻ¨ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ā§‡āĻ° āĻāĻ•āĻŽāĻžāĻ¤ā§āĻ° āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¯āĻž āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻŦāĻŋāĻŽā§‚āĻ°ā§āĻ¤āĻ¤āĻžāĻ° āĻ¸ā§āĻ¤āĻ°ā§‡ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ¨āĻžāĨ¤ .

āĻŸā§āĻ˛āĻ¸ āĻĻā§āĻŦāĻžāĻ°āĻž, āĻ†āĻŽāĻŋ āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻāĻŦāĻ‚ āĻ¤ā§ƒāĻ¤ā§€āĻ¯āĻŧ āĻĒāĻ•ā§āĻˇā§‡āĻ° āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻ—ā§āĻ˛āĻŋ āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒā§āĻ°āĻĻāĻ¤ā§āĻ¤ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ (APIs) āĻāĻŦāĻ‚ āĻ¸ā§‡āĻ‡āĻ¸āĻžāĻĨā§‡ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ¸āĻĢā§āĻŸāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻŦā§‹āĻāĻžāĻ¯āĻŧ āĻ¯āĻž āĻŽāĻžāĻ˛ā§āĻŸāĻŋ-āĻĨā§āĻ°ā§‡āĻĄā§‡āĻĄ āĻ•ā§‹āĻĄ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•āĻŋāĻ¤ āĻ¯ā§‡āĻ•ā§‹āĻ¨ā§‹ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨āĻ•ā§‡ āĻ¸āĻšāĻœ āĻ•āĻ°ā§‡āĨ¤

āĻāĻ•āĻŸāĻŋ āĻĨā§āĻ°ā§‡āĻĄ āĻļā§āĻ°ā§ āĻšāĻšā§āĻ›ā§‡

āĻĨā§āĻ°ā§‡āĻĄ āĻ•ā§āĻ˛āĻžāĻ¸ āĻĨā§āĻ°ā§‡āĻĄ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ .NET-āĻāĻ° āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻŽā§ŒāĻ˛āĻŋāĻ• āĻ•ā§āĻ˛āĻžāĻ¸āĨ¤ āĻ•āĻ¨āĻ¸ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸāĻ° āĻĻā§āĻŸāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻĻā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°ā§‡:

  • āĻĨā§āĻ°ā§‡āĻĄāĻ¸ā§āĻŸāĻžāĻ°ā§āĻŸ - āĻ•ā§‹āĻ¨ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ° āĻ¨ā§‡āĻ‡
  • ParametrizedThreadStart - āĻŸāĻžāĻ‡āĻĒ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ° āĻ¸āĻšāĨ¤

āĻ¸ā§āĻŸāĻžāĻ°ā§āĻŸ āĻŽā§‡āĻĨāĻĄ āĻ•āĻ˛ āĻ•āĻ°āĻžāĻ° āĻĒāĻ° āĻ¨āĻ¤ā§āĻ¨ āĻ¤ā§ˆāĻ°āĻŋ āĻĨā§āĻ°ā§‡āĻĄā§‡ āĻĄā§‡āĻ˛āĻŋāĻ—ā§‡āĻŸ āĻāĻ•ā§āĻ¸āĻŋāĻ•āĻŋāĻ‰āĻŸ āĻ•āĻ°āĻž āĻšāĻŦā§‡āĨ¤ āĻ¯āĻĻāĻŋ ParametrizedThreadStart āĻ§āĻ°āĻ¨ā§‡āĻ° āĻĄā§‡āĻ˛āĻŋāĻ—ā§‡āĻŸ āĻ•āĻ¨āĻ¸ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸāĻ°ā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻĒāĻžāĻ āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻāĻ•āĻŸāĻž āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸ āĻ¸ā§āĻŸāĻžāĻ°ā§āĻŸ āĻŽā§‡āĻĨāĻĄā§‡ āĻĒāĻžāĻ¸ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻ¸ā§āĻŸā§āĻ°ā§€āĻŽā§‡ āĻ•ā§‹āĻ¨ā§‹ āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻ¤āĻĨā§āĻ¯ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ‡ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻŸāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨āĨ¤ āĻāĻŸāĻŋ āĻ˛āĻ•ā§āĻˇāĻŖā§€āĻ¯āĻŧ āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻĨā§āĻ°ā§‡āĻĄ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻŦā§āĻ¯āĻ¯āĻŧāĻŦāĻšā§āĻ˛ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨, āĻāĻŦāĻ‚ āĻĨā§āĻ°ā§‡āĻĄāĻŸāĻŋ āĻ¨āĻŋāĻœā§‡āĻ‡ āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻ°ā§€ āĻŦāĻ¸ā§āĻ¤ā§, āĻ…āĻ¨ā§āĻ¤āĻ¤ āĻ•āĻžāĻ°āĻŖ āĻāĻŸāĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ•ā§‡āĻ° āĻ‰āĻĒāĻ° 1MB āĻŽā§‡āĻŽāĻ°āĻŋ āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ OS API āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻŋāĻĨāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨āĨ¤

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

ThreadPool āĻ•ā§āĻ˛āĻžāĻ¸ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ˛ā§‡āĻ° āĻ§āĻžāĻ°āĻŖāĻž āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§‡āĨ¤ .NET-āĻ, āĻĨā§āĻ°ā§‡āĻĄ āĻĒā§āĻ˛ āĻšāĻ˛ āĻĒā§āĻ°āĻ•ā§ŒāĻļāĻ˛ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ…āĻ‚āĻļ, āĻāĻŦāĻ‚ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻĢā§āĻŸā§‡āĻ° āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€āĻ°āĻž āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻ¤ā§‡ āĻāĻŸāĻŋ āĻ¸āĻ°ā§āĻŦā§‹āĻ¤ā§āĻ¤āĻŽāĻ­āĻžāĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡ āĻ¤āĻž āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻ¨ā§‡āĻ• āĻĒā§āĻ°āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°ā§‡āĻ›ā§‡ā§ˇ

āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ§āĻžāĻ°āĻŖāĻž:

āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻļā§āĻ°ā§ āĻšāĻ“āĻ¯āĻŧāĻžāĻ° āĻŽā§āĻšā§‚āĻ°ā§āĻ¤ āĻĨā§‡āĻ•ā§‡, āĻāĻŸāĻŋ āĻŦā§āĻ¯āĻžāĻ•āĻ—ā§āĻ°āĻžāĻ‰āĻ¨ā§āĻĄā§‡ āĻ°āĻŋāĻœāĻžāĻ°ā§āĻ­ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻĨā§āĻ°ā§‡āĻĄ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻžāĻ° āĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻ¯āĻĻāĻŋ āĻĨā§āĻ°ā§‡āĻĄāĻ—ā§āĻ˛āĻŋ āĻ˜āĻ¨ āĻ˜āĻ¨ āĻāĻŦāĻ‚ āĻŦāĻĄāĻŧ āĻ¸āĻ‚āĻ–ā§āĻ¯āĻžāĻ¯āĻŧ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻĒā§āĻ˛āĻŸāĻŋ āĻ•āĻ˛āĻžāĻ°ā§‡āĻ° āĻšāĻžāĻšāĻŋāĻĻāĻž āĻŽā§‡āĻŸāĻžāĻ¤ā§‡ āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤ āĻ¯āĻ–āĻ¨ āĻ¸āĻ āĻŋāĻ• āĻ¸āĻŽāĻ¯āĻŧā§‡ āĻĒā§āĻ˛ā§‡ āĻ•ā§‹āĻ¨ā§‹ āĻŽā§āĻ•ā§āĻ¤ āĻĨā§āĻ°ā§‡āĻĄ āĻ¨āĻž āĻĨāĻžāĻ•ā§‡, āĻ¤āĻ–āĻ¨ āĻāĻŸāĻŋ āĻšāĻ¯āĻŧ āĻāĻ•āĻŸāĻŋ āĻĨā§āĻ°ā§‡āĻĄ āĻĢāĻŋāĻ°ā§‡ āĻ†āĻ¸āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŦā§‡, āĻ…āĻĨāĻŦāĻž āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦā§‡āĨ¤ āĻāĻŸāĻŋ āĻ…āĻ¨ā§āĻ¸āĻ°āĻŖ āĻ•āĻ°ā§‡ āĻ¯ā§‡ āĻĨā§āĻ°ā§‡āĻĄ āĻĒā§āĻ˛āĻŸāĻŋ āĻ•āĻŋāĻ›ā§ āĻ¸ā§āĻŦāĻ˛ā§āĻĒ-āĻŽā§‡āĻ¯āĻŧāĻžāĻĻā§€ āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ˛āĻžāĻĒā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĻā§āĻ°ā§āĻĻāĻžāĻ¨ā§āĻ¤ āĻāĻŦāĻ‚ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻŸāĻŋāĻ° āĻĒā§āĻ°ā§‹ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ āĻœā§āĻĄāĻŧā§‡ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻ–āĻžāĻ°āĻžāĻĒāĻ­āĻžāĻŦā§‡ āĻ‰āĻĒāĻ¯ā§āĻ•ā§āĻ¤āĨ¤

āĻĒā§āĻ˛ āĻĨā§‡āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻĨā§āĻ°ā§‡āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻāĻ•āĻŸāĻŋ QueueUserWorkItem āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯āĻž WaitCallback āĻŸāĻžāĻ‡āĻĒā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ•ā§‡ āĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°ā§‡, āĻ¯āĻžāĻ° ParametrizedThreadStart āĻāĻ° āĻŽāĻ¤ā§‹ āĻāĻ•āĻ‡ āĻ¸ā§āĻŦāĻžāĻ•ā§āĻˇāĻ° āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻāĻŸāĻŋāĻ¤ā§‡ āĻĒāĻžāĻ¸ āĻ•āĻ°āĻž āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ°āĻŸāĻŋ āĻāĻ•āĻ‡ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻ•āĻ°ā§‡āĨ¤

ThreadPool.QueueUserWorkItem(...);

āĻ•āĻŽ āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤ āĻĨā§āĻ°ā§‡āĻĄ āĻĒā§āĻ˛ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ RegisterWaitForSingleObject āĻ…-āĻŦā§āĻ˛āĻ•āĻŋāĻ‚ IO āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻ¸āĻ‚āĻ—āĻ āĻŋāĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ āĻšāĻ¯āĻŧāĨ¤ āĻāĻ‡ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ¤ā§‡ āĻĒāĻžāĻ¸ āĻ•āĻ°āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ•ā§‡ āĻĄāĻžāĻ•āĻž āĻšāĻŦā§‡ āĻ¯āĻ–āĻ¨ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ¤ā§‡ āĻĒāĻžāĻ¸ āĻ•āĻ°āĻž WaitHandle "āĻ°āĻŋāĻ˛āĻŋāĻœ" āĻšāĻŦā§‡āĨ¤

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 āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻ°āĻĻā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ°ā§āĻœāĻŋāĻ¤ āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻĒā§‡āĻ¯āĻŧā§‡āĻ›āĻŋāĨ¤ āĻāĻ‡ āĻ§āĻžāĻ°āĻŖāĻžāĻ—ā§āĻ˛āĻŋ āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸ āĻ•ā§‹āĻĄ āĻ˛ā§‡āĻ–āĻž āĻ¸āĻŽā§āĻ­āĻŦ āĻ•āĻ°ā§‡āĻ›ā§‡ āĻ¯ā§‡āĻ¨ āĻāĻŸāĻŋ āĻ¸āĻšāĻœ āĻāĻŦāĻ‚ āĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸ āĻ›āĻŋāĻ˛, āĻāĻŸāĻŋ āĻāĻŽāĻ¨āĻ•āĻŋ āĻĨā§āĻ°ā§‡āĻĄāĻ—ā§āĻ˛āĻŋāĻ° āĻ…āĻ­ā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§€āĻŖ āĻ•āĻžāĻœ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ¸āĻžāĻŽāĻžāĻ¨ā§āĻ¯ āĻŦā§‹āĻāĻžāĻ° āĻ…āĻ§āĻŋāĻ•āĻžāĻ°ā§€ āĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋāĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯āĻ“ āĻāĻ—ā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻŽāĻ¨ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻ˛ā§‡āĻ–āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻŸāĻŋ āĻ¸āĻŽā§āĻ­āĻŦ āĻ•āĻ°ā§‡āĻ›ā§‡, āĻĻā§€āĻ°ā§āĻ˜ āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ˛āĻžāĻĒ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¯ā§‡ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻœāĻŽāĻž āĻšāĻ¯āĻŧ āĻ¨āĻžāĨ¤ async/await āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻāĻ• āĻŦāĻž āĻāĻŽāĻ¨āĻ•āĻŋ āĻāĻ•āĻžāĻ§āĻŋāĻ• āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻˇāĻ¯āĻŧ, āĻ¤āĻŦā§‡ āĻ†āĻŽāĻŋ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻŦāĻžāĻ•ā§āĻ¯ā§‡ āĻāĻŸāĻŋāĻ° āĻ¸āĻžāĻ°āĻžāĻ‚āĻļ āĻĒā§‡āĻ¤ā§‡ āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻŦ:

  • async āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ āĻŽā§‡āĻĨāĻĄ āĻ°āĻŋāĻŸāĻžāĻ°ā§āĻ¨āĻŋāĻ‚ Task āĻŦāĻž void āĻāĻ° āĻāĻ•āĻŸāĻŋ āĻ¸āĻ‚āĻļā§‹āĻ§āĻ•
  • āĻāĻŦāĻ‚ await āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¨-āĻŦā§āĻ˛āĻ•āĻŋāĻ‚ āĻŸāĻžāĻ¸ā§āĻ• āĻ“āĻ¯āĻŧā§‡āĻŸāĻŋāĻ‚ āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻ°āĨ¤

āĻ†āĻŦāĻžāĻ°āĻ“: āĻ“āĻ¯āĻŧā§‡āĻŸ āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻ°, āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ (āĻŦā§āĻ¯āĻ¤āĻŋāĻ•ā§āĻ°āĻŽ āĻ†āĻ›ā§‡), āĻāĻ•ā§āĻ¸āĻŋāĻ•āĻŋāĻ‰āĻļāĻ¨ā§‡āĻ° āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻĨā§āĻ°ā§‡āĻĄāĻŸāĻŋ āĻ†āĻ°āĻ“ āĻ°āĻŋāĻ˛āĻŋāĻœ āĻ•āĻ°āĻŦā§‡, āĻāĻŦāĻ‚ āĻ¯āĻ–āĻ¨ āĻŸāĻžāĻ¸ā§āĻ•āĻŸāĻŋ āĻ¤āĻžāĻ° āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻļā§‡āĻˇ āĻ•āĻ°āĻŦā§‡, āĻāĻŦāĻ‚ āĻĨā§āĻ°ā§‡āĻĄāĻŸāĻŋ (āĻ†āĻ¸āĻ˛ā§‡, āĻĒā§āĻ°āĻ¸āĻ™ā§āĻ—āĻŸāĻŋ āĻŦāĻ˛āĻž āĻ†āĻ°āĻ“ āĻ¸āĻ āĻŋāĻ• āĻšāĻŦā§‡) , āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻĒāĻ°ā§‡ āĻ†āĻ°āĻ“) āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻŸāĻŋ āĻ†āĻ°āĻ“ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻž āĻšāĻžāĻ˛āĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻŦā§‡āĨ¤ .NET-āĻāĻ° āĻ…āĻ­ā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§‡, āĻāĻ‡ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻŸāĻŋ āĻĢāĻ˛āĻ¨ āĻ°āĻŋāĻŸāĻžāĻ°ā§āĻ¨ā§‡āĻ° āĻŽāĻ¤ā§‹āĻ‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¯āĻ–āĻ¨ āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻļā§āĻ°ā§‡āĻŖāĻŋāĻ¤ā§‡ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻšāĻ¯āĻŧ, āĻ¯āĻž āĻāĻ•āĻŸāĻŋ āĻ°āĻžāĻˇā§āĻŸā§āĻ°ā§€āĻ¯āĻŧ āĻ¯āĻ¨ā§āĻ¤ā§āĻ° āĻāĻŦāĻ‚ āĻāĻ‡ āĻ°āĻžāĻœā§āĻ¯āĻ—ā§āĻ˛āĻŋāĻ° āĻ‰āĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ•āĻ°ā§‡ āĻĒā§ƒāĻĨāĻ• āĻŸā§āĻ•āĻ°ā§‹āĻ¤ā§‡ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ†āĻ—ā§āĻ°āĻšā§€ āĻ¯ā§‡ āĻ•ā§‡āĻ‰ asynŅ/await āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ¯ā§‡āĻ•ā§‹āĻ¨ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ•ā§‹āĻĄ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨, āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛āĻžāĻ° āĻœā§‡āĻ¨āĻžāĻ°ā§‡āĻŸā§‡āĻĄ āĻ•ā§‹āĻĄ āĻ¸āĻ•ā§āĻˇāĻŽ āĻ•āĻ°ā§‡ JetBrains āĻĄāĻŸāĻĒāĻŋāĻ• āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ¸āĻŽāĻžāĻŦā§‡āĻļāĻŸāĻŋ āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻāĻŦāĻ‚ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

āĻ†āĻ¸ā§āĻ¨ āĻŸāĻžāĻ¸ā§āĻ• āĻšāĻžāĻ˛ā§ āĻāĻŦāĻ‚ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻŦāĻŋāĻ•āĻ˛ā§āĻĒāĻ—ā§āĻ˛āĻŋ āĻĻā§‡āĻ–āĻŋāĨ¤ āĻ¨ā§€āĻšā§‡āĻ° āĻ•ā§‹āĻĄ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡, āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻŸāĻžāĻ¸ā§āĻ• āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŋ āĻ¯āĻž āĻ•āĻŋāĻ›ā§ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°ā§‡ āĻ¨āĻž (āĻĨā§āĻ°ā§‡āĻĄāĨ¤āĻ¸ā§āĻ˛āĻŋāĻĒ(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āĨ¤ āĻāĻ•āĻŸāĻŋ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ āĻļā§āĻ°ā§ āĻšāĻ“āĻ¯āĻŧāĻžāĻ° āĻĒāĻ°ā§‡ āĻŦāĻžāĻ¤āĻŋāĻ˛āĻ•āĻ°āĻŖ āĻ¸āĻ āĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻž āĻ•ā§‹āĻĄāĻŸāĻŋ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻŦāĻžāĻ¤āĻŋāĻ˛āĻ•āĻ°āĻŖ āĻŸā§‹āĻ•ā§‡āĻ¨ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻšā§‡āĻ• āĻĻāĻŋāĻ¯āĻŧā§‡ āĻĒā§‚āĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻ¯āĻĻāĻŋ āĻ•ā§‹āĻ¨ āĻšā§‡āĻ• āĻ¨āĻž āĻĨāĻžāĻ•ā§‡, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ•ā§āĻ¯āĻžāĻ¨āĻ¸ā§‡āĻ˛ā§‡āĻļāĻ¨ āĻŸā§‹āĻ•ā§‡āĻ¨āĻ¸ā§‹āĻ°ā§āĻ¸ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡ āĻŦāĻ˛āĻž āĻŦāĻžāĻ¤āĻŋāĻ˛ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻŸāĻŋ āĻŸāĻžāĻ¸ā§āĻ•āĻŸāĻŋ āĻļā§āĻ°ā§ āĻšāĻ“āĻ¯āĻŧāĻžāĻ° āĻ†āĻ—ā§‡ āĻāĻŸāĻŋ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻž āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻŦā§‡āĨ¤

āĻļā§‡āĻˇ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ āĻšāĻ˛ 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
}

āĻĒā§āĻ°āĻĨāĻŽ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡, āĻ†āĻŽāĻ°āĻž āĻ•āĻ˛āĻŋāĻ‚ āĻĨā§āĻ°ā§‡āĻĄ āĻŦā§āĻ˛āĻ• āĻ¨āĻž āĻ•āĻ°ā§‡ āĻŸāĻžāĻ¸ā§āĻ•āĻŸāĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻšāĻ“āĻ¯āĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŋ; āĻ†āĻŽāĻ°āĻž āĻĢāĻ˛āĻžāĻĢāĻ˛āĻŸāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ°āĻŖā§‡ āĻĢāĻŋāĻ°ā§‡ āĻ†āĻ¸āĻŦ āĻ¯āĻ–āĻ¨ āĻāĻŸāĻŋ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻĨāĻžāĻ•āĻŦā§‡; āĻ¤āĻ¤āĻ•ā§āĻˇāĻŖ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤, āĻ•āĻ˛āĻŋāĻ‚ āĻĨā§āĻ°ā§‡āĻĄāĻŸāĻŋ āĻ¤āĻžāĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻĄāĻŋāĻ­āĻžāĻ‡āĻ¸ā§‡ āĻ°ā§‡āĻ–ā§‡ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧāĨ¤

āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒā§‡, āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻ—āĻŖāĻ¨āĻž āĻ¨āĻž āĻšāĻ“āĻ¯āĻŧāĻž āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ†āĻŽāĻ°āĻž āĻ•āĻ˛āĻŋāĻ‚ āĻĨā§āĻ°ā§‡āĻĄāĻŸāĻŋ āĻŦā§āĻ˛āĻ• āĻ•āĻ°āĻŋāĨ¤ āĻāĻŸāĻŋ āĻ•ā§‡āĻŦāĻ˛āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ‡ āĻ•āĻžāĻ°āĻŖā§‡āĻ‡ āĻ–āĻžāĻ°āĻžāĻĒ āĻ¨āĻ¯āĻŧ āĻ¯ā§‡ āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻĨā§āĻ°ā§‡āĻĄ āĻĻāĻ–āĻ˛ āĻ•āĻ°ā§‡āĻ›āĻŋ, āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽā§‡āĻ° āĻāĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻŽā§‚āĻ˛ā§āĻ¯āĻŦāĻžāĻ¨ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻžāĻ¨, āĻ¸āĻšāĻœ āĻ…āĻ˛āĻ¸āĻ¤āĻžāĻ° āĻ¸āĻžāĻĨā§‡, āĻ¤āĻŦā§‡ āĻāĻŸāĻŋāĻ“ āĻ•āĻžāĻ°āĻŖ āĻ¯āĻĻāĻŋ āĻ†āĻŽāĻ°āĻž āĻ¯ā§‡ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻŸāĻŋ āĻ•āĻ˛ āĻ•āĻ°āĻŋ āĻ¤āĻžāĻ° āĻ•ā§‹āĻĄāĻŸāĻŋ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ‡āĻœā§‡āĻļāĻ¨ āĻĒā§āĻ°ā§‡āĻ•ā§āĻˇāĻžāĻĒāĻŸā§‡āĻ° āĻĒāĻ°ā§‡ āĻ•āĻ˛āĻŋāĻ‚ āĻĨā§āĻ°ā§‡āĻĄā§‡ āĻĢāĻŋāĻ°ā§‡ āĻ†āĻ¸āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨āĨ¤ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§āĻ¨, āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡ āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ…āĻšāĻ˛āĻžāĻŦāĻ¸ā§āĻĨāĻž āĻĒāĻžāĻŦ : āĻ•āĻ˛āĻŋāĻ‚ āĻĨā§āĻ°ā§‡āĻĄāĻŸāĻŋ āĻ—āĻŖāĻ¨āĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§‡, āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻŸāĻŋ āĻ•āĻ˛āĻŋāĻ‚ āĻĨā§āĻ°ā§‡āĻĄā§‡ āĻ¤āĻžāĻ° āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻšāĻžāĻ˛āĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻ“āĻ¯āĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻŦā§ƒāĻĨāĻž āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°ā§‡āĨ¤

āĻāĻ‡ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻ†āĻ°ā§‡āĻ•āĻŸāĻŋ āĻ…āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻšāĻ˛ āĻœāĻŸāĻŋāĻ˛ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻžāĨ¤ āĻ†āĻ¸āĻ˛ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŸāĻŋ āĻš'āĻ˛ āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸ āĻ•ā§‹āĻĄā§‡āĻ° āĻ¤ā§āĻ°ā§āĻŸāĻŋāĻ—ā§āĻ˛āĻŋ āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•/āĻ“āĻ¯āĻŧā§‡āĻŸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻž āĻ•āĻ°āĻž āĻ–ā§āĻŦ āĻ¸āĻšāĻœ - āĻ¤āĻžāĻ°āĻž āĻāĻ•āĻ‡ āĻ†āĻšāĻ°āĻŖ āĻ•āĻ°ā§‡ āĻ¯ā§‡āĻ¨ āĻ•ā§‹āĻĄāĻŸāĻŋ āĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸ āĻ›āĻŋāĻ˛āĨ¤ āĻ†āĻŽāĻ°āĻž āĻ¯āĻĻāĻŋ āĻāĻ•āĻŸāĻŋ āĻŸāĻžāĻ¸ā§āĻ•ā§‡ āĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸ āĻ“āĻ¯āĻŧā§‡āĻŸ āĻāĻ•ā§āĻ¸ā§‹āĻ¸āĻ¸āĻŋāĻœāĻŽ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻŋ, āĻ¤āĻŦā§‡ āĻ†āĻ¸āĻ˛ āĻŦā§āĻ¯āĻ¤āĻŋāĻ•ā§āĻ°āĻŽāĻŸāĻŋ āĻ¸āĻžāĻŽāĻ—ā§āĻ°āĻŋāĻ• āĻŦā§āĻ¯āĻ¤āĻŋāĻ•ā§āĻ°āĻŽā§‡ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻšāĻ¯āĻŧ, āĻ¯ā§‡āĻŽāĻ¨ āĻŦā§āĻ¯āĻ¤āĻŋāĻ•ā§āĻ°āĻŽāĻŸāĻŋ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻž āĻ•āĻ°āĻ¤ā§‡, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ InnerException āĻĒā§āĻ°āĻ•āĻžāĻ°āĻŸāĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻāĻŦāĻ‚ C# āĻŦāĻŋāĻļā§āĻŦā§‡ āĻŦā§‡āĻļāĻŋ āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤ āĻ•ā§āĻ¯āĻžāĻš āĻŦā§āĻ˛āĻ•ā§‡āĻ° āĻšā§‡āĻ‡āĻ¨ā§‡āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ¯āĻžāĻš āĻŦā§āĻ˛āĻ•ā§‡āĻ° āĻ­āĻŋāĻ¤āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ if āĻšā§‡āĻ‡āĻ¨ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻšāĻŦā§‡ āĻŦāĻž āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ•ā§āĻ¯āĻžāĻšāĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤

āĻ¤ā§ƒāĻ¤ā§€āĻ¯āĻŧ āĻāĻŦāĻ‚ āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ—ā§āĻ˛āĻŋāĻ“ āĻāĻ•āĻ‡ āĻ•āĻžāĻ°āĻŖā§‡ āĻ–āĻžāĻ°āĻžāĻĒ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻšāĻŋāĻšā§āĻ¨āĻŋāĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻāĻ•āĻ‡ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

WhenAny āĻāĻŦāĻ‚ WhenAll āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ—ā§āĻ˛āĻŋ āĻ•āĻžāĻœāĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ—ā§‹āĻˇā§āĻ ā§€āĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻ¤ā§āĻ¯āĻ¨ā§āĻ¤ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻœāĻ¨āĻ•; āĻ¤āĻžāĻ°āĻž āĻ•āĻžāĻ°ā§āĻ¯āĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ—ā§‹āĻˇā§āĻ ā§€āĻ•ā§‡ āĻāĻ•āĻŸāĻŋāĻ¤ā§‡ āĻŽā§‹āĻĄāĻŧāĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧ, āĻ¯ā§‡āĻŸāĻŋ āĻšāĻ¯āĻŧ āĻ¯āĻ–āĻ¨ āĻ—ā§āĻ°ā§āĻĒ āĻĨā§‡āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻŸāĻžāĻ¸ā§āĻ• āĻĒā§āĻ°āĻĨāĻŽ āĻŸā§āĻ°āĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻŦāĻž āĻ¯āĻ–āĻ¨ āĻ¤āĻžāĻĻā§‡āĻ° āĻ¸āĻŦāĻ—ā§āĻ˛āĻŋ āĻ¤āĻžāĻĻā§‡āĻ° āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ¤āĻ–āĻ¨ āĻĢāĻžāĻ¯āĻŧāĻžāĻ° āĻšāĻŦā§‡ā§ˇ

āĻĨā§āĻ°ā§‡āĻĄ āĻĨāĻžāĻŽāĻžāĻ¨ā§‹

āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ•āĻžāĻ°āĻŖā§‡, āĻāĻŸāĻŋ āĻļā§āĻ°ā§ āĻšāĻ“āĻ¯āĻŧāĻžāĻ° āĻĒāĻ°ā§‡ āĻĒā§āĻ°āĻŦāĻžāĻš āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻāĻŸāĻŋ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻĨā§āĻ°ā§‡āĻĄ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡ āĻĻā§āĻŸāĻŋ āĻ¯āĻĨāĻžāĻ¯āĻĨāĻ­āĻžāĻŦā§‡ āĻ¨āĻžāĻŽāĻ•āĻ°āĻŖ āĻ•āĻ°āĻž āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡: āĻŦāĻžāĻ¤āĻŋāĻ˛ и āĻŦāĻžāĻ§āĻž āĻĻā§‡āĻ¯āĻŧ. āĻĒā§āĻ°āĻĨāĻŽ āĻāĻ•āĻŸāĻŋ āĻ…āĻ¤ā§āĻ¯āĻ¨ā§āĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ¨āĻž, āĻ•āĻžāĻ°āĻŖ āĻ¯ā§‡āĻ•ā§‹āĻ¨ āĻāĻ˛ā§‹āĻŽā§‡āĻ˛ā§‹ āĻŽā§āĻšā§āĻ°ā§āĻ¤ā§‡ āĻāĻŸāĻŋ āĻ•āĻ˛ āĻ•āĻ°āĻžāĻ° āĻĒāĻ°ā§‡, āĻ•ā§‹āĻ¨ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļā§‡āĻ° āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ°āĻŖā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻāĻ•āĻŸāĻŋ āĻŦā§āĻ¯āĻ¤āĻŋāĻ•ā§āĻ°āĻŽ āĻ¨āĻŋāĻ•ā§āĻˇā§‡āĻĒ āĻ•āĻ°āĻž āĻšāĻŦā§‡ ThreadAbortedException. āĻ•ā§‹āĻ¨ā§‹ āĻĒā§‚āĻ°ā§āĻŖāĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ āĻŦā§ƒāĻĻā§āĻ§āĻŋ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻŦā§āĻ¯āĻ¤āĻŋāĻ•ā§āĻ°āĻŽ āĻ†āĻļāĻž āĻ•āĻ°ā§‡āĻ¨ āĻ¨āĻž, āĻ¤āĻžāĻ‡ āĻ¨āĻž? āĻāĻŦāĻ‚ āĻāĻ‡ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ–ā§āĻŦ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦ āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ CLR-āĻ•ā§‡ āĻ•ā§‹āĻĄā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻŦāĻŋāĻ­āĻžāĻ—ā§‡ āĻāĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻŦā§āĻ¯āĻ¤āĻŋāĻ•ā§āĻ°āĻŽ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻĨā§‡āĻ•ā§‡ āĻ†āĻŸāĻ•āĻžāĻ¤ā§‡ āĻšāĻžāĻ¨, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻāĻŸāĻŋāĻ•ā§‡ āĻ•āĻ˛āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻŽā§‹āĻĄāĻŧāĻžāĻ¨ā§‹ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻĨā§āĻ°ā§‡āĻĄāĨ¤ āĻļā§āĻ°ā§ āĻ¸āĻŽāĻžāĻ˛ā§‹āĻšāĻ¨āĻžāĻŽā§‚āĻ˛āĻ• āĻ…āĻžā§āĻšāĻ˛, Thread.EndCriticalRegion. āĻāĻ•āĻŸāĻŋ āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻŦā§āĻ˛āĻ•ā§‡ āĻ˛ā§‡āĻ–āĻž āĻ¯ā§‡āĻ•ā§‹āĻ¨ā§‹ āĻ•ā§‹āĻĄ āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ•āĻ˛āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻŽā§‹āĻĄāĻŧāĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧāĨ¤ āĻāĻ‡ āĻ•āĻžāĻ°āĻŖā§‡, āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻ•ā§‹āĻĄā§‡āĻ° āĻ—āĻ­ā§€āĻ°āĻ¤āĻžāĻ¯āĻŧ āĻ†āĻĒāĻ¨āĻŋ āĻ–āĻžāĻ˛āĻŋ āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°ā§‡ āĻŦā§āĻ˛āĻ•āĻ—ā§āĻ˛āĻŋ āĻ–ā§āĻāĻœā§‡ āĻĒā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨, āĻ¤āĻŦā§‡ āĻļā§‡āĻˇ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ–āĻžāĻ˛āĻŋ āĻ¨āĻ¯āĻŧāĨ¤ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻĢā§āĻŸ āĻāĻ‡ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻŸāĻŋāĻ•ā§‡ āĻāĻ¤āĻŸāĻžāĻ‡ āĻ¨āĻŋāĻ°ā§ā§ŽāĻ¸āĻžāĻšāĻŋāĻ¤ āĻ•āĻ°ā§‡ āĻ¯ā§‡ āĻ¤āĻžāĻ°āĻž āĻāĻŸāĻŋāĻ•ā§‡ .net āĻ•ā§‹āĻ°ā§‡ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡āĻ¨āĻŋāĨ¤

āĻŦāĻŋāĻ˜ā§āĻ¨āĻŋāĻ¤ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ†āĻ°ā§‹ āĻ…āĻ¨ā§āĻŽāĻžāĻ¨āĻ¯ā§‹āĻ—ā§āĻ¯āĻ­āĻžāĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡āĨ¤ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻŦā§āĻ¯āĻ¤āĻŋāĻ•ā§āĻ°āĻŽ āĻ¸āĻ™ā§āĻ—ā§‡ āĻĨā§āĻ°ā§‡āĻĄ āĻŦāĻžāĻ§āĻž āĻĻāĻŋāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ ThreadInterruptedException āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¸ā§‡āĻ‡ āĻŽā§āĻšā§āĻ°ā§āĻ¤āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¯āĻ–āĻ¨ āĻĨā§āĻ°ā§‡āĻĄāĻŸāĻŋ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻžāĻ°āĻ¤ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¯āĻŧ āĻĨāĻžāĻ•ā§‡āĨ¤ WaitHandle, āĻ˛āĻ•, āĻŦāĻž Thread.Sleep āĻ•āĻ˛ āĻ•āĻ°āĻžāĻ° āĻĒāĻ°ā§‡ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻŸāĻŋ āĻā§āĻ˛āĻ¨ā§āĻ¤ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¯āĻŧ āĻāĻ‡ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¯āĻŧ āĻĒā§āĻ°āĻŦā§‡āĻļ āĻ•āĻ°ā§‡āĨ¤

āĻ‰āĻĒāĻ°ā§‡ āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻ‰āĻ­āĻ¯āĻŧ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒāĻ‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻ…āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļā§āĻ¯āĻ¤āĻžāĻ° āĻ•āĻžāĻ°āĻŖā§‡ āĻ–āĻžāĻ°āĻžāĻĒāĨ¤ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ•āĻŸāĻŋ āĻ•āĻžāĻ āĻžāĻŽā§‹ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻŦāĻžāĻ¤āĻŋāĻ˛āĻ•āĻ°āĻŖ āĻŸā§‹āĻ•ā§‡āĻ¨ āĻāĻŦāĻ‚ āĻ•ā§āĻ˛āĻžāĻ¸ āĻŦāĻžāĻ¤āĻŋāĻ˛āĻ•āĻ°āĻŖ āĻŸā§‹āĻ•ā§‡āĻ¨ āĻ‰ā§ŽāĻ¸. āĻŽā§‚āĻ˛ āĻŦāĻŋāĻˇāĻ¯āĻŧ āĻšāĻ˛: CancelationTokenSource āĻ•ā§āĻ˛āĻžāĻ¸ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¯āĻŋāĻ¨āĻŋ āĻāĻŸāĻŋāĻ° āĻŽāĻžāĻ˛āĻŋāĻ• āĻ¤āĻŋāĻ¨āĻŋ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻŸāĻŋāĻ•ā§‡ āĻ•āĻ˛ āĻ•āĻ°ā§‡ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻŦāĻžāĻ¤āĻŋāĻ˛. āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ•ā§āĻ¯āĻžāĻ¨ā§āĻ¸ā§‡āĻ˛ā§‡āĻļāĻ¨ āĻŸā§‹āĻ•ā§‡āĻ¨āĻ‡ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ā§‡ āĻĒāĻžāĻ¸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻŦāĻžāĻ¤āĻŋāĻ˛āĻ•āĻ°āĻŖ āĻŸā§‹āĻ•ā§‡āĻ¨ā§‡āĻ° āĻŽāĻžāĻ˛āĻŋāĻ•āĻ°āĻž āĻ¨āĻŋāĻœā§‡āĻ°āĻž āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨āĻŸāĻŋ āĻŦāĻžāĻ¤āĻŋāĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¨āĻž, āĻ¤āĻŦā§‡ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨āĻŸāĻŋ āĻŦāĻžāĻ¤āĻŋāĻ˛ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ•āĻŋāĻ¨āĻž āĻ¤āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻāĻ‡ āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻŦā§āĻ˛āĻŋāĻ¯āĻŧāĻžāĻ¨ āĻ¸āĻŽā§āĻĒāĻ¤ā§āĻ¤āĻŋ āĻ†āĻ›ā§‡ āĻŦāĻžāĻ¤āĻŋāĻ˛ āĻ•āĻ°āĻžāĻ° āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ ThrowIfCancelRequested. āĻĒāĻ°ā§‡āĻ°āĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻŦā§āĻ¯āĻ¤āĻŋāĻ•ā§āĻ°āĻŽ āĻ¨āĻŋāĻ•ā§āĻˇā§‡āĻĒ āĻ•āĻ°āĻŦā§‡ TaskCancelledException āĻ¯āĻĻāĻŋ āĻ•ā§āĻ¯āĻžāĻ¨āĻ¸ā§‡āĻ˛ā§‡āĻļāĻ¨ āĻŸā§‹āĻ•ā§‡āĻ¨ āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻĒā§āĻ¯āĻžāĻ°ā§‹āĻŸā§‡āĻĄā§‡āĻ° āĻ‰āĻĒāĻ° āĻŦāĻžāĻ¤āĻŋāĻ˛ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ•āĻ˛ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻŦāĻ‚ āĻāĻ‡ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻŸāĻŋ āĻ†āĻŽāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻ‡āĨ¤ āĻ•ā§‹āĻ¨ āĻ¸āĻŽāĻ¯āĻŧā§‡ āĻāĻ•āĻŸāĻŋ āĻŦā§āĻ¯āĻ¤āĻŋāĻ•ā§āĻ°āĻŽ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ āĻŦāĻžāĻ¤āĻŋāĻ˛ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¤āĻžāĻ° āĻ‰āĻĒāĻ° āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ˛āĻžāĻ­ āĻ•āĻ°ā§‡ āĻāĻŸāĻŋ āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§€ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒāĻ—ā§āĻ˛āĻŋāĻ° āĻ¤ā§āĻ˛āĻ¨āĻžāĻ¯āĻŧ āĻāĻ•āĻŸāĻŋ āĻ‰āĻ¨ā§āĻ¨āĻ¤āĻŋāĨ¤

āĻāĻ•āĻŸāĻŋ āĻĨā§āĻ°ā§‡āĻĄ āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻ¨ā§ƒāĻļāĻ‚āĻ¸ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻšāĻ˛ Win32 API TerminateThread āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ•āĻ˛ āĻ•āĻ°āĻžāĨ¤ āĻāĻ‡ āĻĢāĻžāĻ‚āĻļāĻ¨āĻŸāĻŋ āĻ•āĻ˛ āĻ•āĻ°āĻžāĻ° āĻĒāĻ°ā§‡ CLR-āĻāĻ° āĻ†āĻšāĻ°āĻŖ āĻ…āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļā§āĻ¯ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ MSDN āĻ āĻāĻ‡ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ˛ā§‡āĻ–āĻž āĻ†āĻ›ā§‡: "TerminateThread āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻĒāĻœā§āĻœāĻ¨āĻ• āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ¯āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻšāĻ°āĻŽ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤āĨ¤ "

FromAsync āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ˛āĻŋāĻ—ā§āĻ¯āĻžāĻ¸āĻŋ APIāĻ•ā§‡ āĻŸāĻžāĻ¸ā§āĻ• āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋāĻ• āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡

āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¯āĻĨā§‡āĻˇā§āĻŸ āĻ­āĻžāĻ—ā§āĻ¯āĻŦāĻžāĻ¨ āĻšāĻ¨ āĻ¯āĻž āĻŸāĻžāĻ¸ā§āĻ• āĻšāĻžāĻ˛ā§ āĻšāĻ“āĻ¯āĻŧāĻžāĻ° āĻĒāĻ°ā§‡ āĻļā§āĻ°ā§ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ āĻāĻŦāĻ‚ āĻŦā§‡āĻļāĻŋāĻ°āĻ­āĻžāĻ— āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ°āĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻļāĻžāĻ¨ā§āĻ¤ āĻ†āĻ¤āĻ™ā§āĻ•ā§‡āĻ° āĻ•āĻžāĻ°āĻŖ āĻšāĻ¯āĻŧā§‡ āĻĻāĻžāĻāĻĄāĻŧāĻŋāĻ¯āĻŧā§‡āĻ›ā§‡, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ…āĻ¨ā§‡āĻ•āĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°āĻžāĻ¨ā§‹ API-āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻŽā§‹āĻ•āĻžāĻŦāĻŋāĻ˛āĻž āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ¨āĻž, āĻ‰āĻ­āĻ¯āĻŧ āĻ¤ā§ƒāĻ¤ā§€āĻ¯āĻŧ āĻĒāĻ•ā§āĻˇ āĻāĻŦāĻ‚ āĻ†āĻĒāĻ¨āĻžāĻ° āĻĻāĻ˛ āĻ…āĻ¤ā§€āĻ¤ā§‡ āĻ¨āĻŋāĻ°ā§āĻ¯āĻžāĻ¤āĻ¨ āĻ•āĻ°ā§‡āĻ›ā§‡āĨ¤ āĻ­āĻžāĻ—ā§āĻ¯āĻ•ā§āĻ°āĻŽā§‡, .NET āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻŸāĻŋāĻŽ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¯āĻ¤ā§āĻ¨ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›ā§‡, āĻ¯āĻĻāĻŋāĻ“ āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻ›āĻŋāĻ˛ āĻ¨āĻŋāĻœā§‡āĻĻā§‡āĻ° āĻ¯āĻ¤ā§āĻ¨ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻžāĨ¤ āĻ¸ā§‡āĻŸāĻž āĻ¯ā§‡āĻŽāĻ¨āĻ‡ āĻšā§‹āĻ• āĻ¨āĻž āĻ•ā§‡āĻ¨, .NET-āĻāĻ° āĻ•āĻžāĻ›ā§‡ āĻĒā§āĻ°āĻ¨ā§‹ āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ¤ā§‡ āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ•ā§‹āĻĄāĻ•ā§‡ āĻ¨āĻ¤ā§āĻ¨ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¯āĻ¨ā§āĻ¤ā§āĻ°āĻŖāĻžāĻšā§€āĻ¨āĻ­āĻžāĻŦā§‡ āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻŦā§‡āĻļ āĻ•āĻŋāĻ›ā§ āĻŸā§āĻ˛ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ¤āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻšāĻ˛ āĻŸāĻžāĻ¸ā§āĻ•āĻĢā§āĻ¯āĻžāĻ•ā§āĻŸāĻ°āĻŋāĻ° FromAsync āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĨ¤ āĻ¨ā§€āĻšā§‡āĻ° āĻ•ā§‹āĻĄ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡, āĻ†āĻŽāĻŋ āĻāĻ‡ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻŸāĻžāĻ¸ā§āĻ•ā§‡ WebRequest āĻ•ā§āĻ˛āĻžāĻ¸ā§‡āĻ° āĻĒā§āĻ°āĻžāĻ¨ā§‹ āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ• āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ—ā§āĻ˛āĻŋ āĻŽā§‹āĻĄāĻŧāĻžāĻ¨ā§‹āĨ¤

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

āĻāĻŸāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻāĻŦāĻ‚ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻĒā§āĻ°āĻ•āĻžāĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻŸāĻŋ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽā§āĻ­āĻžāĻŦāĻ¨āĻž āĻ¨ā§‡āĻ‡, āĻ¤āĻŦā§‡ āĻ¯ā§‡āĻ•ā§‹āĻ¨ āĻĒā§āĻ°āĻžāĻ¨ā§‹ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻŸāĻŋ āĻ•ā§‡āĻŦāĻ˛ BeginDoSomething āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻŋāĻ˛āĻŋāĻ¤ āĻšāĻ¯āĻŧ āĻ¯āĻž āĻāĻŸāĻŋ āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ IAsyncResult āĻāĻŦāĻ‚ EndDoSomething āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ—ā§āĻ˛āĻŋ āĻĢāĻŋāĻ°āĻŋāĻ¯āĻŧā§‡ āĻĻā§‡āĻ¯āĻŧāĨ¤

TaskCompletionSource āĻ•ā§āĻ˛āĻžāĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ Legacy API āĻ•ā§‡ Task-āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋāĻ• āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°ā§āĻ¨

āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°āĻžāĻ° āĻ†āĻ°ā§‡āĻ•āĻŸāĻŋ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻšāĻžāĻ¤āĻŋāĻ¯āĻŧāĻžāĻ° āĻšāĻ˛ āĻ•ā§āĻ˛āĻžāĻ¸ āĻŸāĻžāĻ¸ā§āĻ• āĻ•āĻŽāĻĒā§āĻ˛āĻŋāĻļāĻ¨ āĻ¸ā§‹āĻ°ā§āĻ¸. āĻĢāĻžāĻ‚āĻļāĻ¨, āĻ‰āĻĻā§āĻĻā§‡āĻļā§āĻ¯ āĻāĻŦāĻ‚ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ā§‡āĻ° āĻ¨ā§€āĻ¤āĻŋāĻ° āĻĒāĻ°āĻŋāĻĒā§āĻ°ā§‡āĻ•ā§āĻˇāĻŋāĻ¤ā§‡, āĻāĻŸāĻŋ āĻĨā§āĻ°ā§‡āĻĄāĻĒā§āĻ˛ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡āĻ° RegisterWaitForSingleObject āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻ•āĻŋāĻ›ā§āĻŸāĻž āĻ¸ā§āĻŽāĻ°āĻŖ āĻ•āĻ°āĻŋāĻ¯āĻŧā§‡ āĻĻāĻŋāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ¯āĻž āĻ†āĻŽāĻŋ āĻ‰āĻĒāĻ°ā§‡ āĻ˛āĻŋāĻ–ā§‡āĻ›āĻŋāĨ¤ āĻāĻ‡ āĻ•ā§āĻ˛āĻžāĻ¸āĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻ¸āĻšāĻœā§‡āĻ‡ āĻāĻŦāĻ‚ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻœāĻ¨āĻ•āĻ­āĻžāĻŦā§‡ āĻŸāĻžāĻ¸ā§āĻ•āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻĒā§āĻ°āĻžāĻ¨ā§‹ āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸ APIāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻŽā§‹āĻĄāĻŧāĻžāĻ¨ā§‹ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ā§ˇ

āĻ†āĻĒāĻ¨āĻŋ āĻŦāĻ˛āĻŦā§‡āĻ¨ āĻ¯ā§‡ āĻ†āĻŽāĻŋ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ‡ āĻ‰āĻĻā§āĻĻā§‡āĻļā§āĻ¯ā§‡ āĻŸāĻžāĻ¸ā§āĻ•āĻĢā§āĻ¯āĻžāĻ•ā§āĻŸāĻ°āĻŋ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡āĻ° FromAsync āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ•āĻĨāĻž āĻŦāĻ˛ā§‡āĻ›āĻŋāĨ¤ āĻāĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŽāĻ¨ā§‡ āĻ°āĻžāĻ–āĻ¤ā§‡ āĻšāĻŦā§‡ .net-āĻ āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸ āĻŽāĻĄā§‡āĻ˛āĻ—ā§āĻ˛āĻŋāĻ° āĻŦāĻŋāĻ•āĻžāĻļā§‡āĻ° āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ‡āĻ¤āĻŋāĻšāĻžāĻ¸ āĻ¯āĻž āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻĢā§āĻŸ āĻ—āĻ¤ 15 āĻŦāĻ›āĻ°ā§‡ āĻ…āĻĢāĻžāĻ° āĻ•āĻ°ā§‡āĻ›ā§‡: āĻŸāĻžāĻ¸ā§āĻ•-āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋāĻ• āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸ āĻĒā§āĻ¯āĻžāĻŸāĻžāĻ°ā§āĻ¨ (TAP) āĻāĻ° āĻ†āĻ—ā§‡, āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻĒā§āĻ¯āĻžāĻŸāĻžāĻ°ā§āĻ¨ (APP), āĻ¯āĻž āĻ›āĻŋāĻ˛āĨ¤ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ›āĻŋāĻ˛ āĻļā§āĻ°ā§ āĻ•āĻ°āĻžāĻ•āĻŋāĻ›ā§ āĻĢāĻŋāĻ°ā§‡ āĻ†āĻ¸āĻ›ā§‡ IAsyncResult āĻāĻŦāĻ‚ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻļā§‡āĻˇDoSomething āĻ¯āĻž āĻāĻŸāĻŋ āĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻāĻ‡ āĻŦāĻ›āĻ°ā§‡āĻ° āĻ‰āĻ¤ā§āĻ¤āĻ°āĻžāĻ§āĻŋāĻ•āĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ FromAsync āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻŸāĻŋ āĻāĻ•ā§‡āĻŦāĻžāĻ°ā§‡ āĻ¨āĻŋāĻ–ā§āĻāĻ¤, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¸āĻŽāĻ¯āĻŧā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻžāĻĨā§‡, āĻāĻŸāĻŋ āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸ āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋāĻ• āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸ āĻĒā§āĻ¯āĻžāĻŸāĻžāĻ°ā§āĻ¨ āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻŋāĻ¤ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ (āĻ‡āĻāĻĒāĻŋ), āĻ¯āĻž āĻ§āĻ°ā§‡ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ āĻ¯ā§‡ āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻšāĻ˛ā§‡ āĻāĻ•āĻŸāĻŋ āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸ āĻ‰āĻ¤ā§āĻĨāĻžāĻĒāĻŋāĻ¤ āĻšāĻŦā§‡āĨ¤

TaskCompletionSource āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸ āĻŽāĻĄā§‡āĻ˛ā§‡āĻ° āĻšāĻžāĻ°āĻĒāĻžāĻļā§‡ āĻ¤ā§ˆāĻ°āĻŋ āĻŸāĻžāĻ¸ā§āĻ• āĻāĻŦāĻ‚ āĻ˛āĻŋāĻ—ā§āĻ¯āĻžāĻ¸āĻŋ API āĻ—ā§āĻ˛āĻŋ āĻŽā§‹āĻĄāĻŧāĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ āĻ‰āĻĒāĻ¯ā§āĻ•ā§āĻ¤āĨ¤ āĻāĻ° āĻ•āĻžāĻœā§‡āĻ° āĻ¸āĻžāĻ°āĻŽāĻ°ā§āĻŽāĻŸāĻŋ āĻ¨āĻŋāĻŽā§āĻ¨āĻ°ā§‚āĻĒ: āĻāĻ‡ āĻļā§āĻ°ā§‡āĻŖā§€āĻ° āĻāĻ•āĻŸāĻŋ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ• āĻĒā§āĻ°āĻĒāĻžāĻ°ā§āĻŸāĻŋ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻŸāĻžāĻ¸ā§āĻ• āĻŸāĻžāĻ‡āĻĒā§‡āĻ°, āĻ¯āĻžāĻ° āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻŸāĻžāĻ¸ā§āĻ•āĻ•āĻŽāĻĒā§āĻ˛āĻŋāĻļāĻ¨ āĻ¸ā§‹āĻ°ā§āĻ¸ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡āĻ° SetResult, SetException āĻ‡āĻ¤ā§āĻ¯āĻžāĻĻāĻŋ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻāĻ‡ āĻŸāĻžāĻ¸ā§āĻ•ā§‡ āĻ“āĻ¯āĻŧā§‡āĻŸ āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻ¸ā§‡āĻ–āĻžāĻ¨ā§‡ āĻŸāĻžāĻ¸ā§āĻ•āĻ•āĻŽāĻĒā§āĻ˛āĻŋāĻļāĻ¨ āĻ¸ā§‹āĻ°ā§āĻ¸ā§‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻ‰āĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ•āĻ°ā§‡ āĻāĻŸāĻŋ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻž āĻšāĻŦā§‡ āĻŦāĻž āĻŦā§āĻ¯āĻ¤āĻŋāĻ•ā§āĻ°āĻŽ āĻ¸āĻš āĻŦā§āĻ¯āĻ°ā§āĻĨ āĻšāĻŦā§‡āĨ¤ āĻ¯āĻĻāĻŋ āĻāĻŸāĻŋ āĻāĻ–āĻ¨āĻ“ āĻĒāĻ°āĻŋāĻˇā§āĻ•āĻžāĻ° āĻ¨āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻ¸ā§āĻ¨ āĻāĻ‡ āĻ•ā§‹āĻĄā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻŸāĻŋ āĻĻā§‡āĻ–āĻŋ, āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ•āĻŋāĻ›ā§ āĻĒā§āĻ°āĻžāĻ¨ā§‹ EAP API āĻŸāĻžāĻ¸ā§āĻ• āĻ•āĻŽāĻĒā§āĻ˛āĻŋāĻļāĻ¨ āĻ¸ā§‹āĻ°ā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻŸāĻžāĻ¸ā§āĻ•ā§‡ āĻŽā§‹āĻĄāĻŧāĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧ: āĻ¯āĻ–āĻ¨ āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸ āĻĢāĻžāĻ¯āĻŧāĻžāĻ° āĻšāĻ¯āĻŧ, āĻŸāĻžāĻ¸ā§āĻ•āĻŸāĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¯āĻŧ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻšāĻŦā§‡ āĻāĻŦāĻ‚ āĻ¯ā§‡ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻŸāĻŋ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻ°āĻ•ā§‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°ā§‡ āĻāĻ‡ āĻŸāĻžāĻ¸ā§āĻ•āĻŸāĻŋ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸāĻŸāĻŋ āĻĒāĻžāĻ“āĻ¯āĻŧāĻžāĻ° āĻĒāĻ°ā§‡ āĻāĻŸāĻŋāĻ° āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻļā§āĻ°ā§ āĻ•āĻ°āĻŦā§‡ āĻĢāĻ˛.

public static Task<Result> DoAsync(this SomeApiInstance someApiObj) {

    var completionSource = new TaskCompletionSource<Result>();
    someApiObj.Done += 
        result => completionSource.SetResult(result);
    someApiObj.Do();

    result completionSource.Task;
}

āĻŸāĻžāĻ¸ā§āĻ• āĻ•āĻŽāĻĒā§āĻ˛āĻŋāĻļāĻ¨ āĻ¸ā§‹āĻ°ā§āĻ¸ āĻŸāĻŋāĻĒāĻ¸ āĻāĻŦāĻ‚ āĻŸā§āĻ°āĻŋāĻ•āĻ¸

āĻĒā§āĻ°āĻžāĻ¨ā§‹ 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# āĻ¸āĻŋāĻ¨āĻŸā§āĻ¯āĻžāĻ•ā§āĻ¸ āĻĻā§ƒāĻˇā§āĻŸāĻŋāĻ•ā§‹āĻŖ āĻĨā§‡āĻ•ā§‡, āĻāĻ‡ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤ āĻŸāĻžāĻ¸ā§āĻ•ā§‡āĻ° āĻŽāĻ¤ā§‹āĻ‡ āĻ†āĻšāĻ°āĻŖ āĻ•āĻ°āĻŦā§‡ā§ˇ

āĻŸāĻžāĻ¸ā§āĻ• āĻļāĻŋāĻĄāĻŋāĻ‰āĻ˛āĻžāĻ°: āĻŸāĻžāĻ¸ā§āĻ• āĻ˛āĻžā§āĻš āĻ•ā§ŒāĻļāĻ˛ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻž āĻ•āĻ°āĻž

āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ API āĻ¯āĻž āĻ†āĻŽāĻŋ āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ‡ āĻ¤āĻž āĻšāĻ˛ āĻ•ā§āĻ˛āĻžāĻ¸ āĻ•āĻžāĻœā§‡āĻ° āĻ¸ā§‚āĻšāĻŋ āĻāĻŦāĻ‚ āĻāĻ° āĻĄā§‡āĻ°āĻŋāĻ­ā§‡āĻŸāĻŋāĻ­āĻ¸āĨ¤ āĻ†āĻŽāĻŋ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡ āĻ‰āĻĒāĻ°ā§‡ āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ– āĻ•āĻ°ā§‡āĻ›āĻŋ āĻ¯ā§‡ TPL āĻĨā§āĻ°ā§‡āĻĄ āĻœā§āĻĄāĻŧā§‡ āĻŸāĻžāĻ¸ā§āĻ• āĻŦāĻŋāĻ¤āĻ°āĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ•ā§ŒāĻļāĻ˛āĻ—ā§āĻ˛āĻŋ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻž āĻ•āĻ°āĻžāĻ° āĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻ°āĻžāĻ–ā§‡āĨ¤ āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ•ā§ŒāĻļāĻ˛āĻ—ā§āĻ˛āĻŋ TaskScheduler āĻļā§āĻ°ā§‡āĻŖā§€āĻ° āĻŦāĻ‚āĻļāĻ§āĻ°āĻĻā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ¸āĻ‚āĻœā§āĻžāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻ†āĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ¯ā§‡āĻ•ā§‹āĻ¨ā§‹ āĻ•ā§ŒāĻļāĻ˛ āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋāĻ¤ā§‡ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§‡āĨ¤ āĻ¸āĻŽāĻžāĻ¨ā§āĻ¤āĻ°āĻžāĻ˛ āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ āĻāĻ•ā§āĻ¸āĻŸā§āĻ°āĻž, āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻĢā§āĻŸ āĻĻā§āĻŦāĻžāĻ°āĻž āĻŦāĻŋāĻ•āĻļāĻŋāĻ¤, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ .NET āĻāĻ° āĻ…āĻ‚āĻļ āĻ¨āĻ¯āĻŧ, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ•āĻŸāĻŋ Nuget āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ā§ˇ āĻ†āĻ¸ā§āĻ¨ āĻ¸āĻ‚āĻ•ā§āĻˇā§‡āĻĒā§‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻĻā§‡āĻ–āĻŋ:

  • CurrentThreadTaskScheduler — āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻĨā§āĻ°ā§‡āĻĄā§‡ āĻ•āĻžāĻ°ā§āĻ¯ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻ•āĻ°ā§‡
  • Limited Concurrency LevelTask ​​Scheduler — āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ N āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻ•āĻ¯ā§‹āĻ—ā§‡ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻŋāĻ¤ āĻ•āĻžāĻ°ā§āĻ¯ā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻ¸ā§€āĻŽāĻŋāĻ¤ āĻ•āĻ°ā§‡, āĻ¯āĻž āĻ•āĻ¨āĻ¸ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸāĻ°ā§‡ āĻ—ā§ƒāĻšā§€āĻ¤ āĻšāĻ¯āĻŧ
  • āĻ…āĻ°ā§āĻĄāĻžāĻ° āĻ•āĻ°āĻž āĻŸāĻžāĻ¸ā§āĻ• āĻļāĻŋāĻĄāĻŋāĻ‰āĻ˛āĻžāĻ° —āĻ•ā§‡ LimitedConcurrencyLevelTaskScheduler(1) āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ¸āĻ‚āĻœā§āĻžāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻ¤āĻžāĻ‡ āĻ•āĻžāĻœāĻ—ā§āĻ˛āĻŋ āĻ•ā§āĻ°āĻŽāĻžāĻ¨ā§āĻ¸āĻžāĻ°ā§‡ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻž āĻšāĻŦā§‡āĨ¤
  • WorkStealingTaskScheduler - āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°ā§‡ āĻ•āĻžāĻœ āĻšā§āĻ°āĻŋ āĻŸāĻžāĻ¸ā§āĻ• āĻŦāĻŋāĻ¤āĻ°āĻŖā§‡āĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĨ¤ āĻŽā§‚āĻ˛āĻ¤ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻĒā§ƒāĻĨāĻ• āĻĨā§āĻ°ā§‡āĻĄāĻĒā§āĻ˛āĨ¤ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻŸāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°ā§‡ āĻ¯ā§‡ .NET āĻĨā§āĻ°ā§‡āĻĄāĻĒā§āĻ˛ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻŸāĻŋāĻ• āĻ•ā§āĻ˛āĻžāĻ¸, āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ, āĻ¯āĻžāĻ° āĻ…āĻ°ā§āĻĨ āĻšāĻ˛ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ…āĻ‚āĻļā§‡ āĻāĻŸāĻŋāĻ° āĻ“āĻ­āĻžāĻ°āĻ˛ā§‹āĻĄāĻŋāĻ‚ āĻŦāĻž āĻ­ā§āĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ…āĻ¨ā§āĻ¯āĻŸāĻŋāĻ¤ā§‡ āĻĒāĻžāĻ°ā§āĻļā§āĻŦ āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¸ā§ƒāĻˇā§āĻŸāĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ¤āĻžāĻ›āĻžāĻĄāĻŧāĻž, āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ¤ā§āĻ°ā§āĻŸāĻŋāĻ° āĻ•āĻžāĻ°āĻŖ āĻŦā§‹āĻāĻž āĻ…āĻ¤ā§āĻ¯āĻ¨ā§āĻ¤ āĻ•āĻ āĻŋāĻ¨āĨ¤ āĻ¯ā§‡. āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽā§‡āĻ° āĻ•āĻŋāĻ›ā§ āĻ…āĻ‚āĻļā§‡ āĻ†āĻ˛āĻžāĻĻāĻž WorkStealingTaskSchedulers āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ ThreadPool āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ†āĻ•ā§āĻ°āĻŽāĻŖāĻžāĻ¤ā§āĻŽāĻ• āĻāĻŦāĻ‚ āĻ…āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻļāĻŋāĻ¤ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤
  • āĻ¸āĻžāĻ°āĻŋāĻŦāĻĻā§āĻ§ āĻŸāĻžāĻ¸ā§āĻ• āĻļāĻŋāĻĄāĻŋāĻ‰āĻ˛āĻžāĻ° — āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ…āĻ—ā§āĻ°āĻžāĻ§āĻŋāĻ•āĻžāĻ° āĻ¸āĻžāĻ°āĻŋāĻ° āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§€ āĻ•āĻžāĻœ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĻā§‡āĻ¯āĻŧ
  • ThreadPerTaskScheduler — āĻāĻŸāĻŋāĻ¤ā§‡ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻŋāĻ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻŸāĻžāĻ¸ā§āĻ•ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĒā§ƒāĻĨāĻ• āĻĨā§āĻ°ā§‡āĻĄ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡āĨ¤ āĻāĻŽāĻ¨ āĻ•āĻžāĻœāĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻĻāĻ°āĻ•āĻžāĻ°ā§€ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¯ā§‡āĻ—ā§āĻ˛āĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻšāĻ¤ā§‡ āĻ…āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻļāĻŋāĻ¤āĻ­āĻžāĻŦā§‡ āĻĻā§€āĻ°ā§āĻ˜ āĻ¸āĻŽāĻ¯āĻŧ āĻ¨ā§‡āĻ¯āĻŧāĨ¤

āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻ˛ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻ†āĻ›ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻĢā§āĻŸ āĻŦā§āĻ˛āĻ—ā§‡ āĻŸāĻžāĻ¸ā§āĻ•āĻļāĻŋāĻĄāĻŋāĻ‰āĻ˛āĻžāĻ° āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡āĨ¤

āĻŸāĻžāĻ¸ā§āĻ•ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•āĻŋāĻ¤ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§āĻ° āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻœāĻ¨āĻ• āĻĄāĻŋāĻŦāĻžāĻ—āĻŋāĻ‚āĻ¯āĻŧā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻ­āĻŋāĻœā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ˛ āĻ¸ā§āĻŸā§āĻĄāĻŋāĻ“āĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻŸāĻžāĻ¸ā§āĻ• āĻ‰āĻ‡āĻ¨ā§āĻĄā§‹ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻāĻ‡ āĻ‰āĻ‡āĻ¨ā§āĻĄā§‹āĻ¤ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻŸāĻžāĻ¸ā§āĻ•ā§‡āĻ° āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻāĻŦāĻ‚ āĻ•ā§‹āĻĄā§‡āĻ° āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ā§‡ āĻāĻ•ā§āĻ¸āĻŋāĻ•āĻŋāĻ‰āĻŸāĻŋāĻ‚ āĻ˛āĻžāĻ‡āĻ¨ā§‡ āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

.NET: āĻŽāĻžāĻ˛ā§āĻŸāĻŋāĻĨā§āĻ°ā§‡āĻĄāĻŋāĻ‚ āĻāĻŦāĻ‚ āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻŸā§āĻ˛āĨ¤ āĻ…āĻ‚āĻļ 1

PLinq āĻāĻŦāĻ‚ āĻ¸āĻŽāĻžāĻ¨ā§āĻ¤āĻ°āĻžāĻ˛ āĻļā§āĻ°ā§‡āĻŖā§€

āĻŸāĻžāĻ¸ā§āĻ• āĻāĻŦāĻ‚ āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻŦāĻ˛āĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ•āĻŋāĻ›ā§ āĻ›āĻžāĻĄāĻŧāĻžāĻ“, .NET-āĻ āĻ†āĻ°āĻ“ āĻĻā§āĻŸāĻŋ āĻ†āĻ•āĻ°ā§āĻˇāĻŖā§€āĻ¯āĻŧ āĻŸā§āĻ˛ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡: PLinq (Linq2Parallel) āĻāĻŦāĻ‚ āĻ¸āĻŽāĻžāĻ¨ā§āĻ¤āĻ°āĻžāĻ˛ āĻ•ā§āĻ˛āĻžāĻ¸āĨ¤ āĻĒā§āĻ°āĻĨāĻŽāĻŸāĻŋ āĻāĻ•āĻžāĻ§āĻŋāĻ• āĻĨā§āĻ°ā§‡āĻĄā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ Linq āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻŽāĻžāĻ¨ā§āĻ¤āĻ°āĻžāĻ˛ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ā§‡āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻĻā§‡āĻ¯āĻŧāĨ¤ WithDegreeOfParallelism āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻĨā§āĻ°ā§‡āĻĄā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻĻā§āĻ°ā§āĻ­āĻžāĻ—ā§āĻ¯āĻŦāĻļāĻ¤, āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ‡ PLinq āĻāĻ° āĻĄāĻŋāĻĢāĻ˛ā§āĻŸ āĻŽā§‹āĻĄā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻĄā§‡āĻŸāĻž āĻ‰ā§ŽāĻ¸ā§‡āĻ° āĻ…āĻ­ā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§€āĻŖ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ¯āĻĨā§‡āĻˇā§āĻŸ āĻ¤āĻĨā§āĻ¯ āĻĨāĻžāĻ•ā§‡ āĻ¨āĻž āĻ¯āĻžāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ–āĻ¯ā§‹āĻ—ā§āĻ¯ āĻ—āĻ¤āĻŋ āĻ˛āĻžāĻ­ āĻ•āĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ, āĻ…āĻ¨ā§āĻ¯āĻĻāĻŋāĻ•ā§‡, āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻžāĻ° āĻ–āĻ°āĻš āĻ–ā§āĻŦāĻ‡ āĻ•āĻŽ: āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ†āĻ—ā§‡ AsParallel āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ¤ā§‡ āĻ•āĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ Linq āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻšā§‡āĻ‡āĻ¨ āĻāĻŦāĻ‚ āĻ•āĻ°ā§āĻŽāĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻšāĻžāĻ˛āĻžāĻ¯āĻŧāĨ¤ āĻ¤āĻžāĻ›āĻžāĻĄāĻŧāĻž, āĻĒāĻžāĻ°ā§āĻŸāĻŋāĻļāĻ¨ āĻŽā§‡āĻ•āĻžāĻ¨āĻŋāĻœāĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻĄā§‡āĻŸāĻž āĻ‰ā§ŽāĻ¸ā§‡āĻ° āĻĒā§āĻ°āĻ•ā§ƒāĻ¤āĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ PLinq-āĻ•ā§‡ āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻ¤āĻĨā§āĻ¯ āĻĒāĻžāĻ āĻžāĻ¨ā§‹ āĻ¸āĻŽā§āĻ­āĻŦāĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻ†āĻ°ā§‹ āĻĒāĻĄāĻŧāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻāĻ–āĻžāĻ¨ā§‡ и āĻāĻ–āĻžāĻ¨ā§‡.

āĻ¸āĻŽāĻžāĻ¨ā§āĻ¤āĻ°āĻžāĻ˛ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻŸāĻŋāĻ• āĻ•ā§āĻ˛āĻžāĻ¸ āĻ¸āĻŽāĻžāĻ¨ā§āĻ¤āĻ°āĻžāĻ˛āĻ­āĻžāĻŦā§‡ āĻāĻ•āĻŸāĻŋ Foreach āĻ¸āĻ‚āĻ—ā§āĻ°āĻšā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§ƒāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°āĻžāĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡, āĻāĻ•āĻŸāĻŋ āĻĢāĻ° āĻ˛ā§āĻĒ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹ āĻāĻŦāĻ‚ āĻ¸āĻŽāĻžāĻ¨ā§āĻ¤āĻ°āĻžāĻ˛ āĻ‡āĻ¨āĻ­ā§‹āĻ•ā§‡ āĻāĻ•āĻžāĻ§āĻŋāĻ• āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻžāĨ¤ āĻ—āĻŖāĻ¨āĻž āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ¨āĻž āĻšāĻ“āĻ¯āĻŧāĻž āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻĨā§āĻ°ā§‡āĻĄā§‡āĻ° āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°āĻž āĻšāĻŦā§‡āĨ¤ āĻļā§‡āĻˇ āĻ†āĻ°ā§āĻ—ā§āĻŽā§‡āĻ¨ā§āĻŸ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ ParallelOptions āĻĒāĻžāĻ¸ āĻ•āĻ°ā§‡ āĻĨā§āĻ°ā§‡āĻĄā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒāĻ—ā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ TaskScheduler āĻāĻŦāĻ‚ CancellationTokenāĻ“ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

āĻ¤āĻĨā§āĻ¯āĻ“

āĻ†āĻŽāĻŋ āĻ¯āĻ–āĻ¨ āĻ†āĻŽāĻžāĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻŦā§‡āĻĻāĻ¨ā§‡āĻ° āĻ‰āĻĒāĻ•āĻ°āĻŖ āĻāĻŦāĻ‚ āĻāĻ° āĻĒāĻ°ā§‡ āĻ†āĻŽāĻžāĻ° āĻ•āĻžāĻœā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¯ā§‡ āĻ¤āĻĨā§āĻ¯ āĻ¸āĻ‚āĻ—ā§āĻ°āĻš āĻ•āĻ°ā§‡āĻ›āĻŋ āĻ¤āĻžāĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡ āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋ āĻ˛ā§‡āĻ–āĻž āĻļā§āĻ°ā§ āĻ•āĻ°āĻŋ, āĻ¤āĻ–āĻ¨ āĻ†āĻŽāĻŋ āĻ†āĻļāĻž āĻ•āĻ°āĻŋāĻ¨āĻŋ āĻ¯ā§‡ āĻāĻŸāĻŋ āĻāĻ¤ āĻŦā§‡āĻļāĻŋ āĻšāĻŦā§‡āĨ¤ āĻāĻ–āĻ¨, āĻ¯āĻ–āĻ¨ āĻŸā§‡āĻ•ā§āĻ¸āĻŸ āĻāĻĄāĻŋāĻŸāĻ° āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻŋ āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋ āĻŸāĻžāĻ‡āĻĒ āĻ•āĻ°āĻ›āĻŋ āĻ¸ā§‡ āĻ†āĻŽāĻžāĻ•ā§‡ āĻ¨āĻŋāĻ¨ā§āĻĻāĻŋāĻ¤āĻ­āĻžāĻŦā§‡ āĻŦāĻ˛ā§‡ āĻ¯ā§‡ āĻĒā§ƒāĻˇā§āĻ āĻž 15 āĻšāĻ˛ā§‡ āĻ—ā§‡āĻ›ā§‡, āĻ†āĻŽāĻŋ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻŦāĻ°ā§āĻ¤ā§€ āĻĢāĻ˛āĻžāĻĢāĻ˛āĻ—ā§āĻ˛āĻŋ āĻ¸āĻ‚āĻ•ā§āĻˇāĻŋāĻĒā§āĻ¤ āĻ•āĻ°āĻŦāĨ¤ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ•ā§ŒāĻļāĻ˛, āĻāĻĒāĻŋāĻ†āĻ‡, āĻ­āĻŋāĻœā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ˛ āĻŸā§āĻ˛ āĻāĻŦāĻ‚ āĻ¤ā§āĻ°ā§āĻŸāĻŋāĻ—ā§āĻ˛āĻŋ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡ āĻ•āĻ­āĻžāĻ° āĻ•āĻ°āĻž āĻšāĻŦā§‡āĨ¤

āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ā§‡:

  • āĻ†āĻ§ā§āĻ¨āĻŋāĻ• āĻĒāĻŋāĻ¸āĻŋāĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻ‚āĻ¸ā§āĻĨāĻžāĻ¨āĻ—ā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻĨā§āĻ°ā§‡āĻĄ, āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻŋ āĻāĻŦāĻ‚ āĻ¸āĻŽāĻžāĻ¨ā§āĻ¤āĻ°āĻžāĻ˛āĻ¤āĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻ°āĻžā§āĻœāĻžāĻŽāĻ—ā§āĻ˛āĻŋ āĻœāĻžāĻ¨āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤
  • āĻāĻ‡ āĻ‰āĻĻā§āĻĻā§‡āĻļā§āĻ¯ā§‡ .NET āĻāĻ° āĻ…āĻ¨ā§‡āĻ•āĻ—ā§āĻ˛āĻŋ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ¸āĻ°āĻžā§āĻœāĻžāĻŽ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡
  • āĻāĻ—ā§āĻ˛āĻŋ āĻ¸āĻŦāĻ—ā§āĻ˛āĻŋ āĻāĻ•āĻŦāĻžāĻ°ā§‡ āĻ‰āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤ āĻšāĻ¯āĻŧāĻ¨āĻŋ, āĻ¤āĻžāĻ‡ āĻ†āĻĒāĻ¨āĻŋ āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ‡ āĻ‰āĻ¤ā§āĻ¤āĻ°āĻžāĻ§āĻŋāĻ•āĻžāĻ°āĻ—ā§āĻ˛āĻŋ āĻ–ā§āĻāĻœā§‡ āĻĒā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨, āĻ¤āĻŦā§‡, āĻ…āĻ¨ā§‡āĻ• āĻĒā§āĻ°āĻšā§‡āĻˇā§āĻŸāĻž āĻ›āĻžāĻĄāĻŧāĻžāĻ‡ āĻĒā§āĻ°āĻžāĻ¨ā§‹ APIāĻ—ā§āĻ˛āĻŋ āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°āĻžāĻ° āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ā§ˇ
  • .NET-āĻ āĻĨā§āĻ°ā§‡āĻĄā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻž āĻĨā§āĻ°ā§‡āĻĄ āĻāĻŦāĻ‚ āĻĨā§āĻ°ā§‡āĻĄāĻĒā§āĻ˛ āĻ•ā§āĻ˛āĻžāĻ¸ āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ¤ā§āĻŦ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ
  • Thread.Abort, Thread.Interrupt, āĻāĻŦāĻ‚ Win32 API TerminateThread āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦāĻŋāĻĒāĻœā§āĻœāĻ¨āĻ• āĻāĻŦāĻ‚ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ¨āĻžāĨ¤ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡, āĻŦāĻžāĻ¤āĻŋāĻ˛āĻ•āĻ°āĻŖ āĻŸā§‹āĻ•ā§‡āĻ¨ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ­āĻžāĻ˛
  • āĻĒā§āĻ°āĻŦāĻžāĻš āĻāĻ•āĻŸāĻŋ āĻŽā§‚āĻ˛ā§āĻ¯āĻŦāĻžāĻ¨ āĻ¸āĻŽā§āĻĒāĻĻ āĻāĻŦāĻ‚ āĻāĻ° āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻ¸ā§€āĻŽāĻŋāĻ¤āĨ¤ āĻĨā§āĻ°ā§‡āĻĄāĻ—ā§āĻ˛āĻŋ āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻžāĻ¯āĻŧ āĻŦā§āĻ¯āĻ¸ā§āĻ¤ āĻĨāĻžāĻ•ā§‡ āĻāĻŽāĻ¨ āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻāĻĄāĻŧāĻžāĻ¨ā§‹ āĻ‰āĻšāĻŋāĻ¤āĨ¤ āĻāĻ° āĻœāĻ¨ā§āĻ¯ TaskCompletionSource āĻ•ā§āĻ˛āĻžāĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻœāĻ¨āĻ•
  • āĻ¸āĻŽāĻžāĻ¨ā§āĻ¤āĻ°āĻžāĻ˛āĻ¤āĻž āĻāĻŦāĻ‚ āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻļāĻ•ā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§€ āĻāĻŦāĻ‚ āĻ‰āĻ¨ā§āĻ¨āĻ¤ .NET āĻŸā§āĻ˛ āĻšāĻ˛ āĻŸāĻžāĻ¸ā§āĻ•āĨ¤
  • c# async/await āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻ°āĻ°āĻž āĻ¨āĻ¨-āĻŦā§āĻ˛āĻ•āĻŋāĻ‚ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻžāĻ° āĻ§āĻžāĻ°āĻŖāĻžāĻŸāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ•āĻ°ā§‡
  • āĻ†āĻĒāĻ¨āĻŋ TaskScheduler-āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻ•ā§āĻ˛āĻžāĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻĨā§āĻ°ā§‡āĻĄ āĻœā§āĻĄāĻŧā§‡ āĻŸāĻžāĻ¸ā§āĻ•ā§‡āĻ° āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨
  • āĻ­ā§āĻ¯āĻžāĻ˛ā§āĻŸāĻžāĻ¸ā§āĻ• āĻ•āĻžāĻ āĻžāĻŽā§‹ āĻšāĻŸ-āĻĒāĻžāĻĨ āĻāĻŦāĻ‚ āĻŽā§‡āĻŽāĻ°āĻŋ-āĻŸā§āĻ°ā§āĻ¯āĻžāĻĢāĻŋāĻ• āĻ…āĻĒā§āĻŸāĻŋāĻŽāĻžāĻ‡āĻœ āĻ•āĻ°āĻ¤ā§‡ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡
  • āĻ­āĻŋāĻœā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ˛ āĻ¸ā§āĻŸā§āĻĄāĻŋāĻ“āĻ° āĻŸāĻžāĻ¸ā§āĻ• āĻāĻŦāĻ‚ āĻĨā§āĻ°ā§‡āĻĄ āĻ‰āĻ‡āĻ¨ā§āĻĄā§‹āĻ—ā§āĻ˛āĻŋ āĻŽāĻžāĻ˛ā§āĻŸāĻŋ-āĻĨā§āĻ°ā§‡āĻĄā§‡āĻĄ āĻŦāĻž āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸ āĻ•ā§‹āĻĄ āĻĄāĻŋāĻŦāĻžāĻ— āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĻāĻ°āĻ•āĻžāĻ°ā§€ āĻ…āĻ¨ā§‡āĻ• āĻ¤āĻĨā§āĻ¯ āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻ•āĻ°ā§‡
  • PLinq āĻāĻ•āĻŸāĻŋ āĻĻā§āĻ°ā§āĻĻāĻžāĻ¨ā§āĻ¤ āĻ¸āĻ°āĻžā§āĻœāĻžāĻŽ, āĻ¤āĻŦā§‡ āĻāĻŸāĻŋāĻ¤ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻĄā§‡āĻŸāĻž āĻ‰āĻ¤ā§āĻ¸ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻĒāĻ°ā§āĻ¯āĻžāĻĒā§āĻ¤ āĻ¤āĻĨā§āĻ¯ āĻ¨āĻžāĻ“ āĻĨāĻžāĻ•āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ¤āĻŦā§‡ āĻāĻŸāĻŋ āĻĒāĻžāĻ°ā§āĻŸāĻŋāĻļāĻ¨ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ āĻŋāĻ• āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡
  • āĻšāĻ˛āĻŦā§‡â€Ļ

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨