Note
ãã®ããŒãžã«ã¢ã¯ã»ã¹ããã«ã¯ãæ¿èªãå¿ èŠã§ãã ãµã€ã³ã€ã³ãŸãã¯ãã£ã¬ã¯ããªã®å€æŽã詊ãããšãã§ããŸãã
ãã®ããŒãžã«ã¢ã¯ã»ã¹ããã«ã¯ãæ¿èªãå¿ èŠã§ãã ãã£ã¬ã¯ããªã®å€æŽã詊ãããšãã§ããŸãã
ãã®èšäºã§ã¯ã次ã®ã³ã³ãã€ã© ãšã©ãŒã«ã€ããŠèª¬æããŸãã
-
CS1983: ããã¯éåæã¡ãœããã§ãããããæ»ãå€ã®åŒã¯ '
T' ã§ã¯ãªã 'Task<T>' åã§ããå¿ èŠããããŸãã - CS1985: catch å¥ã§ await åŒã䜿çšã§ããŸããã
-
CS1986: '
await' ã§ã¯ãåã«é©å㪠'GetAwaiter' ã¡ãœãããå¿ èŠã§ãã - CS1989: éåæã©ã ãåŒãåŒããªãŒã«å€æããããšã¯ã§ããŸããã
- CS1991: 'Type' 㯠Windows ã©ã³ã¿ã€ã ã€ãã³ãã§ããã'event' ã¯éåžžã® .NET ã€ãã³ãã§ããããã'event' ãå®è£ ã§ããŸããã
-
CS1992: '
await' æŒç®åã¯ã'async' 修食åã§ããŒã¯ãããã¡ãœãããŸãã¯ã©ã ãåŒå ã«å«ãŸããŠããå Žåã«ã®ã¿äœ¿çšã§ããŸãã -
CS1994: '
async' 修食åã¯ãæ¬äœãæã€ã¡ãœããã§ã®ã¿äœ¿çšã§ããŸãã -
CS1995: '
await' æŒç®åã¯ãæåã® 'from' å¥ã®æåã®ã³ã¬ã¯ã·ã§ã³åŒå ããŸã㯠'join' å¥ã®ã³ã¬ã¯ã·ã§ã³åŒå ã§ã®ã¿äœ¿çšã§ããŸãã - CS1996: lock ã¹ããŒãã¡ã³ãå ã§åŸ æ©ã§ããŸããã
- CS1997: 颿°ã¯å€ãè¿ãéåæã¡ãœããã§ãããããreturn ããŒã¯ãŒãã®åŸã«ãªããžã§ã¯ãåŒãç¶ããŠã¯ãªããŸããã
-
CS1998: ãã®éåæã¡ãœããã«ã¯ '
await' æŒç®åããªããããåæçã«å®è¡ãããŸãã'await' æŒç®åã䜿çšããŠéããããã³ã° API åŒã³åºããåŸ æ©ãããã'await Task.Run(...)' ã䜿çšããŠããã¯ã°ã©ãŠã³ã ã¹ã¬ããã§ CPU ãã€ã³ãåŠçãå®è¡ããããšãæ€èšããŠãã ããã - CS4001: åŒãåŸ ã€ããšãã§ããŸããã
-
CS4003: '
await' ã¯ãéåæã¡ãœãããŸãã¯ã©ã ãåŒå ã®èå¥åãšããŠäœ¿çšã§ããŸããã - CS4005: éåæã¡ãœããã¯ãã€ã³ã¿ãŒåãã©ã¡ãŒã¿ãŒãæã€ããšãã§ããŸããã
- CS4006: éåæã¡ãœããã®ãã©ã¡ãŒã¿ãŒ ãªã¹ãã§ã¯ã__arglistã¯èš±å¯ãããŸããã
-
CS4007: åã®ã€ã³ã¹ã¿ã³ã¹ã¯ã'
await' ãŸã㯠'yield' å¢çãè¶ããŠä¿æã§ããŸããã -
CS4008: '
void' ãåŸ æ©ã§ããŸããã - CS4009: void ãŸã㯠int æ»ãå€ã®ãšã³ã㪠ãã€ã³ããéåæã«ããããšã¯ã§ããŸããã
- CS4010: éåæåŒãããªã²ãŒãåã«å€æã§ããŸãããéåæåŒã¯ voidãTaskããŸã㯠Task<T> ãè¿ããŸãããããããåã«å€æã§ããªãå ŽåããããŸãã
-
CS4011: '
await' ã«ã¯ã'{1}' ã®æ»ãå€ã®åãå¿ èŠã§ããGetAwaiter()' ã«ã¯ãé©å㪠'IsCompleted'ã'OnCompleted'ãããã³ 'GetResult' ã¡ã³ããŒãããã'INotifyCompletion' ãŸã㯠'ICriticalNotifyCompletion' ãå®è£ ããŸãã - CS4012: åã®ãã©ã¡ãŒã¿ãŒã¯ãéåæã¡ãœãããŸãã¯éåæã©ã ãåŒã§ã¯å®£èšã§ããŸããã
-
CS4014: ãã®åŒã³åºãã¯åŸ
æ©ãããŠããªããããçŸåšã®ã¡ãœããã®å®è¡ã¯åŒã³åºããå®äºããåã«ç¶è¡ãããŸããåŒã³åºãã®çµæã«
awaitæŒç®åãé©çšããããšãæ€èšããŠãã ããã - CS4015: 'MethodImplOptions.Synchronized' ãéåæã¡ãœããã«é©çšã§ããŸããã
- CS4016: ããã¯éåæã¡ãœããã§ãããããæ»ãå€ã®åŒã¯ã宣èšãããåã§ã¯ãªãåã®ãããªåã¿ã¹ã¯ã§ããå¿ èŠããããŸãã
- CS4027: åŒã®åã¯ãå¿ èŠãªã¡ã³ããŒãå®è£ ããŠããŸããã
-
CS4028: '
await' ã¯ãåãé©å㪠'GetAwaiter' ã¡ãœãããæã£ãŠããããšãå¿ èŠãšããŸãã'System' ã® using ãã£ã¬ã¯ãã£ããå¿ããŠããŸããã? - CS4029: 'void' åã®åŒãè¿ãããšã¯ã§ããŸããã
- CS4030: ã»ãã¥ãªãã£å±æ§ã Async ã¡ãœããã«é©çšã§ããŸããã
- CS4031: 'SecurityCritical' 屿§ãŸã㯠'SecuritySafeCritical' 屿§ãæã€ã€ã³ã¿ãŒãã§ã€ã¹ãã¯ã©ã¹ããŸãã¯æ§é äœã§ã¯ãéåæã¡ãœããã䜿çšã§ããŸããã
-
CS4032: '
await' æŒç®åã¯ãéåæã¡ãœããå ã§ã®ã¿äœ¿çšã§ããŸãããã®ã¡ãœããã 'async' 修食åã§ããŒã¯ãããã®æ»ãå€ã®åã 'Task<T>' ã«å€æŽããããšãæ€èšããŠãã ããã -
CS4033: '
await' æŒç®åã¯ãéåæã¡ãœããå ã§ã®ã¿äœ¿çšã§ããŸãããã®ã¡ãœããã 'async' 修食åã§ããŒã¯ããæ»ãå€ã®åã 'Task' ã«å€æŽããããšãæ€èšããŠãã ããã -
CS4034: '
await' æŒç®åã¯ãéåæã¡ãœããå ã§ã®ã¿äœ¿çšã§ããŸãããã®ã¡ãœããã 'async' 修食åã§ããŒã¯ããããšãæ€èšããŠãã ããã - CS8031: ããªã²ãŒããè¿ãã¿ã¹ã¯ã«å€æãããéåæã©ã ãåŒã¯ãå€ãè¿ãããšãã§ããŸããã
-
CS8100: '
await' æŒç®åã¯ãéçã¹ã¯ãªãã倿°åæååã§ã¯äœ¿çšã§ããŸããã - CS8177: éåæã¡ãœããã«åç §ããŒã«ã«ãå«ããããšã¯ã§ããŸããã
-
CS8178: ã¡ãœããã®åŒã³åºãã«ãã£ãŠè¿ãããåç
§ã¯ã'
await' ãŸã㯠'yield' å¢çãè¶ããŠä¿æã§ããŸããã - CS8204: åã¿ãŒã²ããã® AsyncMethodBuilder ãšããŠäœ¿çšããåã®å Žåããã® Task ããããã£ã¯ã宣èšãããåã§ã¯ãªãã¿ãŒã²ããåãè¿ãå¿ èŠããããŸãã
-
CS8403: IAsyncEnumerable
asyncT< ãè¿ãã«ã¯ãå埩åãããã¯ãæã€ã¡ãœããã '>' ã«ããå¿ èŠããããŸãã - CS8411: åã«å¿ èŠãªã¡ã³ããŒã«é©ãããããªã㯠ã€ã³ã¹ã¿ã³ã¹ãŸãã¯æ¡åŒµå®çŸ©ãå«ãŸããŠããªããããéåæ foreach ã¹ããŒãã¡ã³ãã¯åã®å€æ°ãæäœã§ããŸããã
- CS8892: åæãšã³ã㪠ãã€ã³ããèŠã€ãã£ããããã¡ãœããã¯ãšã³ã㪠ãã€ã³ããšããŠäœ¿çšãããŸããã
- CS8935: AsyncMethodBuilder 屿§ã¯ãæç€ºçãªæ»ãå€ã®åãæããªãå¿åã¡ãœããã§ã¯èš±å¯ãããŸããã
- CS8940: äžè¬çãªã¿ã¹ã¯ã«äŒŒãæ»ãå€ã®åãå¿ èŠã§ãããã'AsyncMethodBuilder' 屿§ã§èŠã€ãã£ãåã¯é©ããŠããŸãããããã¯ã¢ãªã㣠1 ã®éé£çµãžã§ããªãã¯åã§ããå¿ èŠãããããã®å å«å (ååšããå Žå) ã¯éãžã§ããªãã¯ã§ããå¿ èŠããããŸãã
-
CS9123: '
&' æŒç®åã¯ãéåæã¡ãœããã®ãã©ã¡ãŒã¿ãŒãŸãã¯ããŒã«ã«å€æ°ã§ã¯äœ¿çšããªãã§ãã ããã -
CS9330: '
MethodImplAttribute.Async' ãã¡ãœããã«æåã§é©çšããããšã¯ã§ããŸãããã¡ãœããã« 'async' ãããŒã¯ããŸãã
Await åŒã®èŠä»¶
- CS1985: catch ç¯ã§ã¯ await ã䜿çšã§ããŸããã
-
CS1986: '
await' ã§ã¯ãåã«é©å㪠'GetAwaiter' ã¡ãœãããå¿ èŠã§ãã -
CS1992: '
await' æŒç®åã¯ã'async' 修食åã§ããŒã¯ãããã¡ãœãããŸãã¯ã©ã ãåŒå ã«å«ãŸããŠããå Žåã«ã®ã¿äœ¿çšã§ããŸãã -
CS1995: '
await' æŒç®åã¯ãæåã® 'from' å¥ã®æåã®ã³ã¬ã¯ã·ã§ã³åŒå ããŸã㯠'join' å¥ã®ã³ã¬ã¯ã·ã§ã³åŒå ã§ã®ã¿äœ¿çšã§ããŸãã - CS1996: lock ã¹ããŒãã¡ã³ãã®æ¬äœã§ await ã䜿çšã§ããŸããã
-
CS4008: '
void' ãåŸ æ©ã§ããŸããã -
CS4032: '
await' æŒç®åã¯ãéåæã¡ãœããå ã§ã®ã¿äœ¿çšã§ããŸãããã®ã¡ãœããã 'async' 修食åã§ããŒã¯ãããã®æ»ãå€ã®åã 'Task<T>' ã«å€æŽããããšãæ€èšããŠãã ããã -
CS4033: '
await' æŒç®åã¯ãéåæã¡ãœããå ã§ã®ã¿äœ¿çšã§ããŸãããã®ã¡ãœããã 'async' 修食åã§ããŒã¯ãããã®æ»ãå€ã®åã 'Task' ã«å€æŽããããšãæ€èšããŠãã ããã -
CS4034: '
await' æŒç®åã¯ãéåæã¡ãœããå ã§ã®ã¿äœ¿çšã§ããŸãããã®ã¡ãœããã 'async' 修食åã§ããŒã¯ããããšãæ€èšããŠãã ããã -
CS8178: ãã®åŒã³åºãã«ãã£ãŠè¿ãããåç
§ã¯ã'
await' ãŸã㯠'yield' å¢çãè¶ããŠä¿æã§ããŸããã - CS8411: åã«å¿ èŠãªã¡ã³ããŒã«é©ãããããªã㯠ã€ã³ã¹ã¿ã³ã¹ãŸãã¯æ¡åŒµå®çŸ©ãå«ãŸããŠããªããããéåæ foreach ã¹ããŒãã¡ã³ãã¯åã®å€æ°ãæäœã§ããŸããã
- CS4001: åŒãåŸ æ©ã§ããŸããã
-
CS4003: '
await' ã¯ãéåæã¡ãœãããŸãã¯ã©ã ãåŒå ã®èå¥åãšããŠäœ¿çšã§ããŸããã -
CS4007: åã®ã€ã³ã¹ã¿ã³ã¹ã¯ã'
await' ãŸã㯠'yield' å¢çãè¶ããŠä¿æã§ããŸããã -
CS4011: '
await' ã§ã¯ã'GetAwaiter()' ã®æ»ãå€ã®åãé©å㪠'IsCompleted'ã'OnCompleted'ãããã³ 'GetResult' ã¡ã³ããŒãæã¡ã'INotifyCompletion' ãŸã㯠'ICriticalNotifyCompletion' ãå®è£ ããå¿ èŠããããŸãã - CS4027: åã«å¿ èŠãªã¡ã³ããŒãå®è£ ãããŠããŸããã
-
CS4028: '
await' ã«ã¯ãåã«é©å㪠'GetAwaiter' ã¡ãœãããå¿ èŠã§ãããããã㊠'System' ã® using ãã£ã¬ã¯ãã£ããè¶³ããªãã®ã§ã¯ãããŸãããïŒ -
CS8100: '
await' æŒç®åã¯ãéçã¹ã¯ãªãã倿°åæååã§ã¯äœ¿çšã§ããŸããã
次ã®é
ç®ã§ã¯ãåãšã©ãŒãä¿®æ£ããæ¹æ³ã«ã€ããŠèª¬æããŸãã
awaitæŒç®åãš awaiter ãã¿ãŒã³ã®è©³çްã«ã€ããŠã¯ããasync ããã³ await ã䜿çšããéåæããã°ã©ãã³ã°ããåç
§ããŠãã ããã
-
async修食åããawaitåŒ (CS1992ãCS4032ãCS4033ãCS4034) ãå«ãã¡ãœãããŸãã¯ã©ã ãåŒã«è¿œå ããŸãã ã³ã³ãã€ã©ã§ã¯ãéåæã®äžæãšåéãåŠçããã¹ããŒã ãã·ã³ãçæã§ããããã«ãasync修食åãå¿ èŠã§ãã ãã®ãšã©ãŒã® 3 ã€ã®ããªã¢ã³ãã¯ãæ£ããæ»ãå€ã®åã®ã³ã³ããã¹ãåºæã®ææ¡ãæäŸããŸãã - C# 5 以å (
await) ãã¿ãŒã²ãããšããå ŽåãcatchåŒã ãããã¯ããç§»åããŸãã C# 6 以éã§ã¯ãã³ã³ãã€ã©ã¯awaitãããã¯ãšcatchãããã¯ã®äž¡æ¹ã§finallyããµããŒãããŠããŸãã ãã®ãšã©ãŒã¯ãC# 6 以éã§ã¯çæãããªããªããŸããã - ã¹ããŒãã¡ã³ã ãããã¯ã®å€ã«
awaitåŒãç§»åããŸãlock(CS1996)ã ããã¯ãä¿æããŠããéã«éåæåŠçãäžæããããšããããããã¯ã®ãªã¹ã¯ããããŸãã ããã¯ã¯ã¹ã¬ãã ã¹ã€ããéã§ä¿æãããä»ã®ã³ãŒããåãããã¯ãåŸ æ©ããŠããå¯èœæ§ããããŸãã - ã¯ãšãªåŒãåæ§ç¯ãã ãæåã®
awaitãŸãã¯from(join) ã®ã³ã¬ã¯ã·ã§ã³åŒã«ã®ã¿è¡šç€ºãããããã«ããŸãã ä»ã®ã¯ãšãªå¥ã¯ãéåæäžæããµããŒãããŠããªãã©ã ãåŒã«å€æãããŸãã - åŸ
æ©äžã®åŒã®åããã¢ã¯ã»ã¹å¯èœãª
GetAwaiter()ã¡ãœãããå ¬éããawaiter ãã¿ãŒã³ (CS1986, CS4028) ã«åŸãããã«å€æŽããŸãã ãã®åã¯ãçŽæ¥ãŸãã¯æ¡åŒµã¡ãœããã䜿çšããŠãã¿ãŒã³ãå®è£ ã§ããŸããGetAwaiterã¡ãœãããååšããããusingã®Systemãã£ã¬ã¯ãã£ãããªãå Žåãã³ã³ãã€ã©ã¯ CS1986 ã§ã¯ãªãããå ·äœç㪠CS4028 ã¡ãã»ãŒãžãçæããŸãã -
GetAwaiter()ã«ãã£ãŠè¿ããã awaiter åãIsCompletedãOnCompletedãããã³GetResultã¡ã³ããŒãæã¡ãINotifyCompletionãŸãã¯ICriticalNotifyCompletion (CS4011ãCS4027) ãå®è£ ããŠããããšã確èªããŸããawaitåŒã¯ãå®äºç¶æ ã®ç¢ºèªãç¶ç¶ã®ç»é²ãçµæã®ååŸãè¡ãããã«ããããã®ã¡ã³ããŒã«äŸåããŸãã - åŒã³åºãããã¡ãœããã®æ»ãå€ã®åã
voidãã Task ãŸã㯠Task<TResult> ã«å€æŽããŠãçµæãåŸ æ©ã§ããããã«ããŸã (CS4008)ã å®äºã远跡ãããäŸå€ãäŒéãããããã¿ã¹ã¯ ãªããžã§ã¯ãããªããããvoidè¿ãã¡ãœãããåŸ æ©ã§ããŸããã -
awaited åŒã awaiter ãã¿ãŒã³ (CS4001) ããµããŒãããåã«å€æŽããŸãã
intãstringããã®ä»ã®çµã¿èŸŒã¿åãªã©ã®åã«ã¯GetAwaiterã¡ãœããããªããããçŽæ¥åŸ æ©ããããšã¯ã§ããŸããã -
(
await) ã䜿çšããåã«ãref ãè¿ãã¡ãœããåŒã³åºãã®çµæãããŒã«ã«å€æ°ã«æ ŒçŽããŸãã éåæã¹ããŒã ãã·ã³ãå¥ã®ã¹ã¬ãããŸãã¯ã³ã³ããã¹ãã§äžæããã³åéãããåç §ãç¡å¹ã«ãªãå¯èœæ§ããããããã¡ãœããã«ãã£ãŠè¿ãããåç §ãawaitå¢çãè¶ããŠä¿æããããšã¯ã§ããŸããã - ã³ã¬ã¯ã·ã§ã³åã«IAsyncEnumerable<T>ãå®è£
ãããã
GetAsyncEnumeratorã¡ã³ããŒãšCurrentã¡ã³ããŒãæã€åãè¿ãã¢ã¯ã»ã¹å¯èœãªMoveNextAsyncã¡ãœããã远å ããŸã (CS8411)ãawait foreachã¹ããŒãã¡ã³ãã§ã¯ãã³ã¬ã¯ã·ã§ã³åãéåæåæå¯èœãã¿ãŒã³ã«åŸãå¿ èŠããããŸãã -
awaitã¡ãœãããŸãã¯ã©ã ãåŒ (async) å ã® ãšããååã®ããŒã«ã«å€æ°ãŸãã¯ãã©ã¡ãŒã¿ãŒã®ååã倿ŽããŸãã éåæã³ã³ããã¹ãå ã§ã¯ãawaitã¯ã³ã³ããã¹ã ããŒã¯ãŒãã§ãããèå¥åãšããŠäœ¿çšããããšã¯ã§ããŸããã -
awaitåŒãéçã¹ã¯ãªãã倿°åæååããã¡ãœããæ¬äœ (CS8100) ã«ç§»åããŸãã éçåæååã¯éåæã³ã³ããã¹ãã®å€éšã§å®è¡ããããããawaitã¯ãã®å Žæã§ã¯äœ¿çšã§ããŸããã -
ref structã€ã³ã¹ã¿ã³ã¹ãawaitãŸãã¯yieldå¢ç (CS4007) ãè¶ããŠä¿æããå¿ èŠããªãããã«ã³ãŒããåæ§ç¯ããŸãã éåæã¹ããŒã ãã·ã³ã¯ããŒãã«ããŒã«ã«å€æ°ãæ ŒçŽããref structåã¯èšèšäžã¹ã¿ã㯠ãã€ã³ããããŸããäžæãã€ã³ãéã§ããŒã ã¹ãã¬ãŒãžã«å®å šã«ç§»åããããšã¯ã§ããŸããã
éåæã¡ãœããã·ã°ããã£ã®èŠä»¶
-
CS1983: ããã¯éåæã¡ãœããã§ãããããæ»ãå€ã®åŒã¯ '
Task<T>' ã§ã¯ãªã 'T' åã§ããå¿ èŠããããŸãã -
CS1994: '
async' 修食åã¯ãæ¬äœãæã€ã¡ãœããã§ã®ã¿äœ¿çšã§ããŸãã - CS4009: void ãŸã㯠int æ»ãå€ã®ãšã³ã㪠ãã€ã³ããéåæã«ããããšã¯ã§ããŸããã
- CS8892: åæãšã³ã㪠ãã€ã³ããèŠã€ãã£ããããã¡ãœããã¯ãšã³ã㪠ãã€ã³ããšããŠäœ¿çšãããŸããã
- CS8935: AsyncMethodBuilder 屿§ã¯ãæç€ºçãªæ»ãå€ã®åãæããªãå¿åã¡ãœããã§ã¯èš±å¯ãããŸããã
- CS8940: äžè¬çãªã¿ã¹ã¯ã«äŒŒãæ»ãå€ã®åãå¿ èŠã§ãããã'AsyncMethodBuilder' 屿§ã§èŠã€ãã£ãåã¯é©ããŠããŸãããããã¯ã¢ãªã㣠1 ã®éé£çµãžã§ããªãã¯åã§ããå¿ èŠãããããã®å å«å (ååšããå Žå) ã¯éãžã§ããªãã¯ã§ããå¿ èŠããããŸãã
-
CS8403: å埩åãããã¯ãæã€ã¡ãœããã¯ã'
async' ãè¿ãããã« '{1}' ã§ããå¿ èŠããããŸãã -
CS9330: '
MethodImplAttribute.Async' ãã¡ãœããã«æåã§é©çšããããšã¯ã§ããŸãããã¡ãœãã 'async' ãããŒã¯ããŸãã - CS4005: éåæã¡ãœããã¯ãã€ã³ã¿ãŒåãã©ã¡ãŒã¿ãŒãæã€ããšãã§ããŸããã
- CS4006: __arglistã¯ãéåæã¡ãœããã®ãã©ã¡ãŒã¿ãŒ ãªã¹ãã§ã¯äœ¿çšã§ããŸããã
- CS4010: éåæã©ã ããããªã²ãŒãåã«å€æã§ããŸãããéåæã©ã ã㯠voidãTaskããŸã㯠Task<T> ãè¿ããŸãããããããæ»ãå€ã®åã«å€æã§ããªãå¯èœæ§ããããŸãã
- CS4012: åã®ãã©ã¡ãŒã¿ãŒã¯ãéåæã¡ãœãããŸãã¯éåæã©ã ãåŒã§ã¯å®£èšã§ããŸããã
- CS4015: 'MethodImplOptions.Synchronized' ãéåæã¡ãœããã«é©çšã§ããŸããã
- CS4016: ããã¯éåæã¡ãœããã§ãããããæ»ãå€ã®åŒã¯åã§ã¯ãªãã¿ã¹ã¯åã§ããå¿ èŠããããŸãã
- CS8031: ããªã²ãŒããè¿ãã¿ã¹ã¯ã«å€æãããéåæã©ã ãåŒã¯ãå€ãè¿ãããšãã§ããŸããã
- CS8204: åã® AsyncMethodBuilder ãšããŠäœ¿çšããåã®å Žåããã® Task ããããã£ã¯ã宣èšãããåã§ã¯ãªãå¿ é ã®åãè¿ãå¿ èŠããããŸãã
次ã®é
ç®ã§ã¯ãåãšã©ãŒãä¿®æ£ããæ¹æ³ã«ã€ããŠèª¬æããŸãã éåæã¡ãœãã宣èšã®è©³çްã«ã€ããŠã¯ã async 修食åãš éåæã®æ»ãå€ã®åãåç
§ããŠãã ããã
- éåæã¡ãœããã®åºã«ãªãçµæã®å (CS1983ãCS4016) ãšäžèŽããããã«æ»ãåŒ ã倿ŽããŸãã éåæã¡ãœããã
Task<T>ãè¿ãå Žåãreturnã¹ããŒãã¡ã³ãã¯ãTã§ã¯ãªãTask<T>åã®å€ãæå®ããå¿ èŠããããŸããããã¯ãã³ã³ãã€ã©ã«ãã£ãŠçæãããã¹ããŒã ãã·ã³ãã¿ã¹ã¯å ã®å€ãèªåçã«ã©ããããããã§ãã CS1983 ã¯ãã¡ãœãããTask<T>ãè¿ããåŒãTããããšãã«è¡šç€ºãããŸãã CS4016 ã§ã¯ã æ»ãå€ã®åŒã®åãäžèŽããªãäžè¬çãªã±ãŒã¹ã«ã€ããŠèª¬æããŸãã - æœè±¡ã¡ãœãããã€ã³ã¿ãŒãã§ã€ã¹ ã¡ãœããå®£èš (
async) ãªã©ã®æ¬äœãæããªãã¡ãœããããã修食åãåé€ããŸãã ã³ã³ãã€ã©ãã¹ããŒã ãã·ã³ã®å®è£ ãçæã§ããããã«ãasync修食åã«ã¯ã¡ãœããæ¬äœãå¿ èŠã§ãã - éåæãšã³ã㪠ãã€ã³ãã®æ»ãå€ã®åã Task ãŸã㯠Task<TResult> (CS4009) ã«å€æŽããŸãã C# 7.1 以éã§ã¯ã
Mainã¡ãœãã ãasyncã§ããŸãããTaskãŸãã¯Task<int>-async voidãè¿ãå¿ èŠããããasync intã¯æå¹ãªãšã³ã㪠ãã€ã³ãã·ã°ããã£ã§ã¯ãããŸããã - ãããžã§ã¯ãã«åæã¡ãœãããšéåæ
Mainã¡ãœãã (CS8892) ã®äž¡æ¹ãå«ãŸããŠããå Žåã¯ã1 ã€ã®ãšã³ã㪠ãã€ã³ããåé€ãŸãã¯åå倿ŽããŸãã ã³ã³ãã€ã©ã¯åæãšã³ã㪠ãã€ã³ããéžæããç¡èŠããéåæåè£ã«å¯ŸããŠãã®èŠåãçºè¡ããŸãã -
[AsyncMethodBuilder]屿§ (CS8935) ãé©çšããåã«ãã©ã ãåŒã«æç€ºçãªæ»ãå€ã®åã远å ããŸãã ã³ã³ãã€ã©ã¯ã屿§ãã³ã³ãã€ã«æã«ç¹å®ã®æ»ãå€ã®åãšäžèŽããå¿ èŠããããããæ»ãå€ã®åãæšè«ãããå¿åã¡ãœããã®ãã«ããŒåã解決ã§ããŸããã -
[AsyncMethodBuilder]屿§ã§æå®ãããåããMyTaskMethodBuilder<>ã§ã¯ãªãMyTaskMethodBuilder<T>ãéãžã§ããªãã¯å (CS8940) ã®ä»£ããã«ãåŒæ°åæ°ã1ã®éå¢çãžã§ããªãã¯åã«å€æŽããŸãã ãã«ããŒã®å å«å (ååšããå Žå) ããžã§ããªãã¯ã§ãªãå¿ èŠããããŸãã ã³ã³ãã€ã©ã§ã¯ãå ·äœçãªã¿ã¹ã¯ã«äŒŒãæ»ãå€ã®åã«å¯ŸããŠãã«ããŒãæ§ç¯ã§ããããã«ããã®å³åœ¢ãå¿ èŠã§ãã - manual
[MethodImpl(MethodImplOptions.Async)]屿§ããã¡ãœãã宣èšã®asyncããŒã¯ãŒã (CS9330) ã«çœ®ãæããŸããMethodImplOptions.Asyncãã©ã°ã¯å éšã©ã³ã¿ã€ã çšã«äºçŽãããŠããããŠãŒã¶ãŒ ã³ãŒãã§çŽæ¥é©çšããããšã¯ã§ããŸããã -
asyncãå«ã¿ããŸãã¯IAsyncEnumerable<T>ãè¿ãã¡ãœããã«IAsyncEnumerator<T>修食åã远å ããŸã (CS8403)ãasync修食åããªããšãã³ã³ãã€ã©ã¯ã¡ãœãããåæå埩åãšããŠæ±ããéåæã¹ããªãŒã ã¹ããŒã ãã·ã³ãçæã§ããŸããã - éåæã¡ãœãã (CS4005) ãããã€ã³ã¿ãŒåãã©ã¡ãŒã¿ãŒãåé€ããŸãã ãã€ã³ã¿ãŒã¯ãéåæäžæãã€ã³ãéã§å®å šã«ä¿æã§ããªãåºå®ã¡ã¢ãªã®å Žæãåç §ããŸãããã®å Žæã§ã¯ãå¥ã®ã¹ã¬ããã§å®è¡ãåéãããå¯èœæ§ããããŸãã
- éåæã¡ãœãããã©ã¡ãŒã¿ãŒ ãªã¹ã (
__arglist) ãããåé€ããŸãã å¯å€é·åŒæ°ãªã¹ãã¯ãããŒãå²ãåœãŠ éåæã¹ããŒã ãã·ã³ãšäºææ§ã®ãªãã¹ã¿ã㯠ããŒã¹ã®åŒã³åºãèŠåã«äŸåããŸãã - éåæã¡ãœãããŸãã¯éåæã©ã ãåŒ (
ref) ãããinãoutããŸãã¯ref structãã©ã¡ãŒã¿ãŒãããã³Span<T>ãReadOnlySpan<T>ãªã©ã®åã®ãã©ã¡ãŒã¿ãŒãåé€ããŸãã ãããã®ãã©ã¡ãŒã¿ãŒåã¯ã¹ã¿ã㯠ãã€ã³ãã§ãããããŒãå²ãåœãŠéåæã¹ããŒã ãã·ã³ã¯ããŒãžã£ã§ã¯å®å šã«ãã£ããã£ã§ããŸããã - éåæã©ã ãã®æ»ãå€ã®å (CS4010) ã«äžèŽããããã«ã¿ãŒã²ãã ããªã²ãŒãåã倿ŽããŸãã éåæã©ã ãã¯ã
voidã TaskããŸã㯠Task<TResult>ãè¿ãããšãã§ããŸããã³ã³ãã€ã©ã¯ãç°ãªãæ»ãå€ã®åãå¿ èŠãšããä»»æã®ããªã²ãŒãåã«å€æããããšã¯ã§ããŸããã - éãžã§ããªãã¯
returnè¿ãããªã²ãŒãã«å²ãåœãŠãããŠããéåæã©ã ãããTaskåŒãåé€ããããã©ã ããå€ãè¿ãããšãã§ããããã«ããªã²ãŒãåãFunc<Task<T>>ã«å€æŽããŸã (CS8031)ã éãžã§ããªãã¯Taskæ»ãããªã²ãŒãã¯ãçµæã®ãªãéåææäœã衚ãã®ã§ãå€ãè¿ããšåãäžèŽããŸããã - éåæã¡ãœãã (
[MethodImpl(MethodImplOptions.Synchronized)]) ãã屿§ãåé€ããŸããSynchronizedãªãã·ã§ã³ã¯ã¡ãœããå®è¡å šäœã®ããã¯ãååŸããŸãããéåæã¡ãœããã¯äžæãããç°ãªãã¹ã¬ããã§åéãããå¯èœæ§ãããããã㯠ã»ãã³ãã£ã¯ã¹ãæªå®çŸ©ã«ãªããŸãã - ã«ã¹ã¿ã
AsyncMethodBuilderåãä¿®æ£ãããã®Taskããããã£ãéåæã¡ãœããã®å®£èšãããæ»ãå€ã®å (CS8204) ãšåãåãè¿ãããã«ããŸãã ã³ã³ãã€ã©ã¯ãã«ããŒã®Taskããããã£ã䜿çšããŠæçµçãªã¿ã¹ã¯ ãªããžã§ã¯ããååŸãããããåã®äžäžèŽã«ãã£ãŠã¹ããŒã ãã·ã³ãæ£ããæ©èœããªããªããŸãã
éåæã®ãã©ã¯ãã£ã¹
- CS1989: éåæã©ã ãåŒãåŒããªãŒã«å€æããããšã¯ã§ããŸããã
- CS1991: 'Type' 㯠Windows ã©ã³ã¿ã€ã ã€ãã³ãã§ããã'event' ã¯éåžžã® .NET ã€ãã³ãã§ããããã'event' ãå®è£ ã§ããŸããã
- CS1997: 颿°ã¯å€ãè¿ãéåæã¡ãœããã§ãããããreturn ããŒã¯ãŒãã®åŸã«ãªããžã§ã¯ãåŒãç¶ããŠã¯ãªããŸããã
-
CS1998: ãã®éåæã¡ãœããã«ã¯ '
await' æŒç®åããªããããåæçã«å®è¡ãããŸãã'await' æŒç®åã䜿çšããŠéããããã³ã° API åŒã³åºããåŸ æ©ãããã'await Task.Run(...)' ã䜿çšããŠããã¯ã°ã©ãŠã³ã ã¹ã¬ããã§ CPU ãã€ã³ãåŠçãå®è¡ããããšãæ€èšããŠãã ããã -
CS4014: ãã®åŒã³åºãã¯åŸ
æ©ãããŠããªããããçŸåšã®ã¡ãœããã®å®è¡ã¯åŒã³åºããå®äºããåã«ç¶è¡ãããŸããåŒã³åºãã®çµæã«
awaitæŒç®åãé©çšããããšãæ€èšããŠãã ããã - CS8177: éåæã¡ãœããã«åç §ããŒã«ã«ãå«ããããšã¯ã§ããŸããã
-
CS9123: '
&' æŒç®åã¯ãéåæã¡ãœããã®ãã©ã¡ãŒã¿ãŒãŸãã¯ããŒã«ã«å€æ°ã§ã¯äœ¿çšããªãã§ãã ããã - CS4029: 'void' åã®åŒãè¿ãããšã¯ã§ããŸããã
- CS4030: ã»ãã¥ãªãã£å±æ§ã Async ã¡ãœããã«é©çšã§ããŸããã
- CS4031: 'SecurityCritical' 屿§ãŸã㯠'SecuritySafeCritical' 屿§ãæã€ã€ã³ã¿ãŒãã§ã€ã¹ãã¯ã©ã¹ããŸãã¯æ§é äœã§ã¯ãéåæã¡ãœããã䜿çšã§ããŸããã
次ã®é
ç®ã§ã¯ãåãšã©ãŒãä¿®æ£ããæ¹æ³ã«ã€ããŠèª¬æããŸãã 詳现ã«ã€ããŠã¯ããasync ããã³ await ã䜿çšããéåæããã°ã©ãã³ã°ãããã³ãawaitæŒç®åããåç
§ããŠãã ããã
-
awaitãŸãã¯Taskãè¿ããã¹ãŠã®åŒã³åºãã«Task<TResult>æŒç®åã远å ãããããã¡ã€ã¢ ã¢ã³ã ãã©ãŒã²ããåäœãæ¬åœã«æå³ãããŠããå Žåã¯ã_ =ã§çµæãæç€ºçã«ç Žæ£ããŸã (CS4014)ãawaitããªããšãéåææäœã«ãã£ãŠã¹ããŒãããäŸå€ã¯èªåçã«å€±ãããåŒã³åºãå ã®ã¡ãœããã¯æäœãçµäºããåã«å®è¡ãç¶è¡ããã埮åŠãªé åºä»ããšæ£ç¢ºæ§ã®ãã°ãçºçããå¯èœæ§ããããŸãã - æ»ãå€ã®åã
return(éãžã§ããªãã¯) ã®éåæã¡ãœããããTaskåŒãåé€ããããã¡ãœãããå€ãè¿ãå¿ èŠããããšãã«æ»ãå€ã®åãTask<T>ã«å€æŽããŸã (CS1997)ãTaskãè¿ãéåæã¡ãœããã§ã¯ãã³ã³ãã€ã©ã«ãã£ãŠã¿ã¹ã¯ ã©ãããŒãçæãããŸããå€ãè¿ããšãã¡ãœãã ã·ã°ããã£ãçµæãçŽæããªããããåãäžèŽããŸããã - ã¡ãœããæ¬äœã«å°ãªããšã 1 ã€ã®
awaitåŒã远å ããããasync修食åãåé€ããŠã¿ã¹ã¯ãçŽæ¥è¿ããŸã (CS1998)ãasyncåŒã®ãªãawaitã¡ãœããã¯å®å šã«åæçã«å®è¡ããããããäžèŠãªã¹ããŒã ãã·ã³ã®ãªãŒããŒããããå¢å ããŸãã ã¡ãœãããæå³çã«åææäœãã©ããããå Žåãasyncãåé€ããã¿ã¹ã¯ãæç€ºçã«è¿ããšããã®ãªãŒããŒããããæé€ãããŸãã - ã©ã ãåŒãæžãçŽããŠã
async(CS1989) ã®ãããªExpression<Func<...>>åã«å²ãåœãŠããããšãã«ã䜿çšããªãããã«ããŸãã åŒããªãŒã¯ãã³ã³ãã€ã©ãåæãŸãã¯å€æã§ããããŒã¿æ§é ãšããŠã³ãŒãã衚ããŸãããasyncçæãããè€éãªã¹ããŒã ãã·ã³ãåŒããªãŒã«ãã£ããã£ããããšã¯ã§ããŸããã - ã€ãã³ãã®å®è£ ã倿ŽããŠãã€ã³ã¿ãŒãã§ã€ã¹å®£èšãšå®è£ ã¯ã©ã¹ã®äž¡æ¹ããã€ãã³ãã§ Windows ã©ã³ã¿ã€ã ã»ãã³ãã£ã¯ã¹ãšéåžžã® .NET ã»ãã³ãã£ã¯ã¹ (CS1991) ã®ã©ã¡ãã䜿çšãããã«ã€ããŠäžèŽããããã«ããŸãã ãã®ãšã©ãŒã¯ãWinRT ã€ãã³ããéåžžã® .NET ã€ãã³ããšããŠå®è£ ã§ããªãããŸãã¯ãã®éã® Windows ã©ã³ã¿ã€ã çžäºéçšã·ããªãªã«é©çšãããŸãã
- éåæã¡ãœãã (CS9123) å
ã®ãã©ã¡ãŒã¿ãŒãŸãã¯ããŒã«ã«å€æ°ãåç
§ããåŒãã
&() ãåé€ããŸãã éåæã¹ããŒã ãã·ã³ã¯ãäžæäžã«ãã£ããã£ããã倿°ãããŒãã«åé 眮ããå¯èœæ§ããããŸããããã«ãããã¢ãã¬ã¹ãä»ããŠååŸããããã€ã³ã¿ãŒãç¡å¹ã«ãªããŸãã - éåæã¡ãœããããåç
§æž¡ããããããŒã«ã«å€æ°ãåé€ãããã
awaitå¢ç (CS8177) ã«ãŸããããªãããã«ç¢ºèªããŸãã éåæã¹ããŒã ãã·ã³ã¯ãããŒãå²ãåœãŠã¯ããŒãžã£å ã®ããŒã«ã«å€æ°ããã£ããã£ããŸããã¹ã¿ãã¯ã®å Žæãžã®åç §ãäžæãã€ã³ãéã§å®å šã«ä¿æããããšã¯ã§ããŸããã C# 13 以éã§ã¯ãrefããŒã«ã«ã¯ãawaitå¢çããŸããããªãéãéåæã¡ãœããã§èš±å¯ããããã®ãšã©ãŒã¯çæãããŸããã -
returnè¿ãã¡ãœããã®çµæãè¿ãvoidã¹ããŒãã¡ã³ããåé€ããããåŒã³åºãããã¡ãœããã倿ŽããŠå€ãè¿ããŸã (CS4029)ãreturn SomeVoidMethod();ã¯å€ãšããŠè¿ãããšãã§ããåã§ã¯ãªãã®ã§ãvoidã䜿çšããããšã¯ã§ããŸãããreturnããŒã¯ãŒããåé€ããã¹ã¿ã³ãã¢ãã³ ã¹ããŒãã¡ã³ããšããŠã¡ãœãããåŒã³åºãããåŒã³åºãããã¡ãœããã®ã·ã°ããã£ã倿ŽããŠå ·è±¡åãè¿ããŸãã - éåæã¡ãœãã (
[SecurityCritical]) ãã[SecuritySafeCritical]ããªã©ã®ã»ãã¥ãªãã£å±æ§ãåé€ãããããããã®å±æ§ (async) ã§ããŒã¯ãããåã®ã¡ãœãããã修食åãåé€ããŸãã ã³ãŒã ã¢ã¯ã»ã¹ ã»ãã¥ãªãã£æ³šéã¯å®£èšã¡ãœããã«é©çšãããŸãããã³ã³ãã€ã©ã«ãã£ãŠçæãããéåæã¹ããŒã ãã·ã³ã¯ããããã®ã»ãã¥ãªãã£æ³šéãé©çšã§ããªãå¥ã®ã³ã³ããã¹ãã§å®è¡ãããŸãã