Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk a következő fordítóhibákat ismerteti:
-
CS1983: Mivel ez egy aszinkron metódus, a visszatérési kifejezésnek "" helyett
Task<T>"T" típusúnak kell lennie. - CS1985: Nem lehet await kifejezést használni a fogási záradékban.
-
CS1986: A "
await" megköveteli, hogy a típus megfelelő ""GetAwaitermetódussal rendelkezzen. - CS1989: Az aszinkron lambda kifejezések nem konvertálhatók kifejezésfákká.
- CS1991: A "Type" nem tudja implementálni az "eseményt", mert windowsos futtatókörnyezeti esemény, az "esemény" pedig egy normál .NET-esemény.
-
CS1992: A "
await" operátor csak akkor használható, ha az "async" módosítóval megjelölt metódusban vagy lambda kifejezésben található. -
CS1994: A "
async" módosító csak olyan metódusokban használható, amelyekben van törzs. -
CS1995: A "
await" operátor csak a kezdeti "from" záradék első gyűjteménykifejezésében vagy egy "join" záradék gyűjteménykifejezésében használható lekérdezési kifejezésben. - CS1996: Az await utasítás nem használható a lock utasítás törzsében.
- CS1997: Mivel a függvény egy aszinkron metódus, amely egy értéket ad vissza, a visszaadott kulcsszót nem szabad objektumkifejezéssel követni.
-
CS1998: Ez az aszinkron metódus nem rendelkezik "
await" operátorokkal, és szinkronban fog futni. Fontolja meg a "await" operátor használatát a nem blokkoló API-hívásokra való várakozáshoz, vagy "await Task.Run(...)" a processzorhoz kötött munka elvégzésére egy háttérszálon. -
CS4008: Nem lehet várni a következőt: ""
void. - CS4009: A void vagy int visszatérési típusú belépési pont nem lehet aszinkron.
-
CS4014: Mivel ez a hívás nem várható, az aktuális metódus végrehajtása a hívás befejezése előtt folytatódik. Fontolja meg az
awaitoperátor alkalmazását a hívás eredményére. -
CS4032: A "
await" operátor csak aszinkron metóduson belül használható. Fontolja meg a metódus "async" módosítóval való megjelölését, és módosítsa visszatérési típusát ""Task<T>-ra. -
CS4033: A "
await" operátor csak aszinkron metóduson belül használható. Fontolja meg a metódus megjelölését a "async" módosítóval, és módosítsa visszatérési típusát ""Task-ra. - CS8892: A metódus nem használható belépési pontként, mert szinkron belépési pont található.
-
CS9123: A "
&" operátor nem használható paramétereken vagy helyi változókon az aszinkron metódusokban. -
CS9330: A "
MethodImplAttribute.Async" nem alkalmazható manuálisan a metódusokra. Jelölje meg az "async" metódust.
Várjon kifejezési követelményekre
- CS1985: Az 'await' nem használható a catch záradékban.
-
CS1986: A "
await" megköveteli, hogy a típus megfelelő ""GetAwaitermetódussal rendelkezzen. -
CS1992: A "
await" operátor csak akkor használható, ha a "async" módosítóval megjelölt metódusban vagy lambda kifejezésben szerepel. -
CS1995: A "
await" operátor csak a kezdeti "from" záradék első gyűjteménykifejezésében vagy egy "join" záradék gyűjteménykifejezésében használható lekérdezési kifejezésben. - CS1996: Nem lehet await-et használni a zárolási utasítás törzsében.
-
CS4008: Nem lehet várakozni erre: '
void'. -
CS4032: A "
await" operátor csak aszinkron metóduson belül használható. Fontolja meg a metódus megjelölését a "async" módosítóval, és módosítsa visszatérési típusát ""Task<T>-ra. -
CS4033: A "
await" operátor csak aszinkron metóduson belül használható. Fontolja meg a metódus megjelölését a "async" módosítóval, és módosítsa visszatérési típusát ""Task-ra.
Az await operátor helyes használatához kövesse az alábbi szabályokat. További információ: Aszinkron programozás aszinkronnal és várakozással.
- Ne használja
awaita fogási záradékokban (CS1985). Aawaittry blokkokat és finally blokkokat (a C# 6 és újabb verzióiban) használhatja, de a catch blokkok különleges kihívásokat jelentenek a kivételkezeléssel és a vezérlés folyamatával. - Ne használjon
awaitlockutasításblokkokban (CS1996). A fordító ezt nem támogatja, hogy elkerülje a holtpontokra hajlamos kód kibocsátását. - Csak
await(CS1995) adott helyeihez használható: a kezdetifromzáradék első gyűjteménykifejezésén belül, vagy egyjoinzáradék gyűjteménykifejezésén belül. - Metódusok vagy lambdakifejezések megjelölése a módosítóval a
asynchasználatawaitelőtt (CS1992, CS4032, CS4033). - Győződjön meg arról, hogy a várakoztatott típusok olyan elérhető
GetAwaitermetódussal rendelkeznek, amely egy várótípust (CS1986) ad vissza. - Ne alkalmazza
awaita típuskifejezésekrevoid(CS4008). - Módosítsa a visszatérési típust
Taskolyan metódusokra, amelyek nem adnak vissza értéket, vagyTask<T>olyan metódusokra, amelyek értéket adnak vissza.
Az Async metódus aláírási követelményei
-
CS1983: Mivel ez egy aszinkron metódus, a visszatérési kifejezésnek "" helyett
Task<T>"T" típusúnak kell lennie. -
CS1994: A "
async" módosító csak olyan metódusokban használható, amelyekben van törzs. - CS4009: Void vagy int visszatérési értékkel rendelkező belépési pont nem lehet aszinkron.
- CS8892: A metódus nem használható belépési pontként, mert szinkron belépési pont található.
-
CS9330: A "
MethodImplAttribute.Async" nem alkalmazható manuálisan a metódusokra. Jelölje meg a ""asyncmetódust.
Az aszinkron metódusok helyes deklarálásához kövesse az alábbi aláírási követelményeket. További információkért lásd az Async fő visszatérési értékeit.
- Adja vissza az érvényes típusok egyikét:
void, Task,Task<T>tevékenységhez hasonló típust IAsyncEnumerable<T>vagy IAsyncEnumerator<T> (CS1983). -
asyncA módosító csak törzsű metódusokon (CS1994) használható. Távolítsa el aasyncmódosítót az absztrakciós metódusokon a felületeken vagy osztályokban. - Frissítsen a C# 7.1 vagy újabb verzióra a
asynchasználatához aMainbelépési pontban, vagy kerülje aasynchasználatát belépési pontokon a korábbi verziókban (CS4009). - Ha szinkronizálási és aszinkron belépési pontokkal (CS8892) is rendelkezik, távolítsa el a szinkron belépési pontokat.
- Használja a
asynckulcsszót aMethodImplAttribute.Asyncmanuális alkalmazása helyett (CS9330).
Aszinkron eljárások
- CS1989: Az aszinkron lambda kifejezések nem konvertálhatók kifejezésfákká.
- CS1991: A "Type" nem tudja implementálni az "eseményt", mert windowsos futtatókörnyezeti esemény, az "esemény" pedig egy normál .NET-esemény.
- CS1997: Mivel a függvény egy aszinkron metódus, amely egy értéket ad vissza, a visszaadott kulcsszót nem szabad objektumkifejezéssel követni.
-
CS1998: Ez az aszinkron metódus nem rendelkezik "
await" operátorokkal, és szinkronban fog futni. Fontolja meg a "await" operátor használatát a nem blokkoló API-hívásokra való várakozáshoz, vagy "await Task.Run(...)" a processzorhoz kötött munka elvégzésére egy háttérszálon. -
CS4014: Mivel ez a hívás nem várható, az aktuális metódus végrehajtása a hívás befejezése előtt folytatódik. Fontolja meg az
awaitoperátor alkalmazását a hívás eredményére. -
CS9123: A "
&" operátor nem használható paramétereken vagy helyi változókon az aszinkron metódusokban.
Az aszinkron kód helyes írásához és a gyakori buktatók elkerüléséhez kövesse az alábbi ajánlott eljárásokat. További információ: Aszinkron programozás aszinkronnal és várakozással.
- Mindig használja az await szót az aszinkron metódusok hívásainál, amelyek Task vagy Task<TResult> (CS4014) értéket adnak vissza. A nem várt hívások a kivételek elvesztéséhez és váratlan viselkedéshez vezethetnek.
- Ne adjon vissza értéket a (nem általános) aszinkron
Taskmetódusokból, hanem használjonTask<T>(CS1997). - Adjon meg legalább egy
awaitoperátort az aszinkron metódusokban, vagy távolítsa el aasyncmódosítót (CS1998). - Távolítsa el az utasítást
return, ha a metódusnak vissza kell térnieTask(CS1997, CS1998). - Módosítsa a metódus visszatérési típusát érték visszaadására
Task<T>(CS1997, CS1998). - Távolítsa el a
asyncmódosítót, és adja vissza közvetlenül a feladatot, ha nincs szüksége az aszinkron állapotú gépre (CS1997, CS1998). - Ne használjon aszinkron metódusokat a kifejezésfákban (CS1989). A kifejezésfák adatként jelölik a kódot, és nem támogatják az aszinkron metódusok által megkövetelt összetett állapotgép-átalakításokat.
- Ne jelölje meg a tartozékok hozzáadását vagy eltávolítását egy interfészen vagy WinRT-eseményen aszinkronként (CS1991). Ez egy platformspecifikus korlátozás a Windows futtatókörnyezet együttműködésére vonatkozóan.
- Kerülje az operátor (
&) címének használatát az aszinkron metódusokon (CS9123) belüli kifejezéseken. A cél a felfüggesztés során áthelyezhető a memóriába, így a mutató érvénytelen.