āĻāĻŽāĻŋ āĻšāĻžāĻŦāĻ°ā§āĻ° āĻŽā§āĻ˛ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°āĻāĻŋ, āĻ¯āĻžāĻ° āĻ
āĻ¨ā§āĻŦāĻžāĻĻ āĻāĻ°ā§āĻĒā§āĻ°ā§āĻā§ āĻĒā§āĻ¸ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§
āĻāĻāĻžāĻ¨ā§ āĻāĻŦāĻ āĻāĻāĻ¨ āĻĢāĻ˛āĻžāĻĢāĻ˛ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ
āĻĒā§āĻā§āĻˇāĻž āĻ¨āĻž āĻāĻ°ā§ āĻ
āĻ¸āĻŋāĻā§āĻā§āĻ°ā§āĻ¨āĻžāĻ¸āĻāĻžāĻŦā§ āĻāĻŋāĻā§ āĻāĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻŦāĻž āĻāĻāĻŋ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨āĻāĻžāĻ°ā§ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻāĻāĻ¨āĻŋāĻā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻŦāĻĄāĻŧ āĻāĻžāĻ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻāĻŽā§āĻĒāĻŋāĻāĻāĻžāĻ°ā§āĻ° āĻāĻŦāĻŋāĻ°ā§āĻāĻžāĻŦā§āĻ° āĻāĻā§ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻāĻŋāĻ˛āĨ¤ āĻ¤āĻžāĻĻā§āĻ° āĻāĻŦāĻŋāĻ°ā§āĻāĻžāĻŦā§āĻ° āĻ¸āĻžāĻĨā§, āĻāĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨āĻāĻŋ āĻā§āĻŦ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦ āĻšāĻ¯āĻŧā§ āĻāĻ ā§āĨ¤ āĻāĻāĻ¨, 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 āĻĨā§āĻ°ā§āĻĄāĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻĒā§āĻ°āĻ¸ā§āĻ¸āĻ°ā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻāĻāĻŋ āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻĒāĻ˛āĻŦā§āĻ§āĻŋ āĻāĻ°āĻŦā§āĨ¤
āĻāĻžāĻ¸ā§āĻ āĻ¸āĻŽāĻžāĻ¨ā§āĻ¤āĻ°āĻžāĻ˛ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ
āĻāĻžāĻ¸ā§āĻ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻ˛āĻžāĻ˛ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ (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 â āĻāĻāĻŋāĻ¤ā§ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻŋāĻ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻāĻžāĻ¸ā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻĒā§āĻĨāĻ āĻĨā§āĻ°ā§āĻĄ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĨ¤ āĻāĻŽāĻ¨ āĻāĻžāĻāĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻĻāĻ°āĻāĻžāĻ°ā§ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¯ā§āĻā§āĻ˛āĻŋ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻšāĻ¤ā§ āĻ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻļāĻŋāĻ¤āĻāĻžāĻŦā§ āĻĻā§āĻ°ā§āĻ āĻ¸āĻŽāĻ¯āĻŧ āĻ¨ā§āĻ¯āĻŧāĨ¤
āĻāĻāĻāĻŋ āĻāĻžāĻ˛ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻāĻā§
āĻāĻžāĻ¸ā§āĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻāĻŋāĻ¤ āĻ¸āĻŦāĻāĻŋāĻā§āĻ° āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻāĻ¨āĻ āĻĄāĻŋāĻŦāĻžāĻāĻŋāĻāĻ¯āĻŧā§āĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŋāĻā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ˛ āĻ¸ā§āĻā§āĻĄāĻŋāĻāĻ¤ā§ āĻāĻāĻāĻŋ āĻāĻžāĻ¸ā§āĻ āĻāĻāĻ¨ā§āĻĄā§ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤ āĻāĻ āĻāĻāĻ¨ā§āĻĄā§āĻ¤ā§ āĻāĻĒāĻ¨āĻŋ āĻāĻžāĻ¸ā§āĻā§āĻ° āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻ āĻŦāĻ¸ā§āĻĨāĻž āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻā§āĻĄā§āĻ° āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ā§ āĻāĻā§āĻ¸āĻŋāĻāĻŋāĻāĻāĻŋāĻ āĻ˛āĻžāĻāĻ¨ā§ āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
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