Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln beskriver följande kompilatorfel:
-
CS1983: Eftersom det här är en asynkron metod måste returuttrycket vara av typen "
Task<T>" i stället för "T". - CS1985: Det går inte att använda 'await' i en catch-sats.
-
CS1986: "
await" kräver att typen har en lämplig "GetAwaiter"-metod. - CS1989: Async lambda-uttryck kan inte konverteras till uttrycksträd.
- CS1991: "Typ" kan inte implementera "händelse" eftersom det är en Windows Runtime-händelse och "händelse" är en vanlig .NET-händelse.
-
CS1992: Operatorn "
await" kan endast användas när den finns i en metod eller ett lambda-uttryck som har markerats med "async"-modifieraren. -
CS1994: Modifieraren kan
asyncbara användas i metoder som har en brödtext. -
CS1995: Operatorn "
await" får endast användas i ett frågeuttryck i det första samlingsuttrycket för den inledandefromsatsen eller i samlingsuttrycket för en "join"-sats. - CS1996: Det går inte att använda 'await' inom en låssats.
- CS1997: Eftersom funktionen är en asynkron metod som returnerar ett värde får ett returnyckelord inte följas av ett objektuttryck.
-
CS1998: Den här asynkrona metoden saknar operatorer
awaitoch körs synkront. Överväg att använda operatorn "await" för att vänta på icke-blockerande API-anrop, eller "await Task.Run(...)" för att utföra CPU-bundet arbete på en bakgrundstråd. -
CS4008: Kan inte invänta '
void'. - CS4009: En ogiltig eller int returnerande startpunkt kan inte vara asynkron.
-
CS4014: Eftersom det här anropet inte vänts på, fortsätter utförandet av den aktuella metoden innan anropet har slutförts. Använd gärna operatorn
awaitpå resultatet av anropet. -
CS4032: Operatorn '
await' kan endast användas inom en asynkron metod. Överväg att markera den här metoden med modifieraren "async" och ändra dess returtyp till "Task<T>". -
CS4033: Operatorn '
await' kan endast användas inom en asynkron metod. Överväg att markera den här metoden med modifierarenasyncoch ändra dess returtyp till .Task - CS8892: Metoden används inte som startpunkt eftersom en synkron startpunkt hittades.
-
CS9123: Operatorn '
&' ska inte användas på parametrar eller lokala variabler i asynkrona metoder. -
CS9330: '
MethodImplAttribute.Async' kan inte tillämpas manuellt på metoder. Markera metoden "async".
Krav för Await-uttryck
- CS1985: Det går inte att använda await i en catch-sats.
-
CS1986: "
await" kräver att typen har en lämplig "GetAwaiter"-metod. -
CS1992: Operatorn "
await" kan endast användas när den finns i en metod eller ett lambda-uttryck som har markerats med modifieraren .async -
CS1995: Operatorn "
await" får endast användas i ett frågeuttryck i det första samlingsuttrycket för den inledandefromsatsen eller i samlingsuttrycket för en "join"-sats. - CS1996: Det går inte att använda await i en lock-sats.
-
CS4008: Kan inte invänta '
void'. -
CS4032: Operatorn '
await' kan endast användas inom en asynkron metod. Överväg att markera den här metoden med modifierarenasyncoch ändra dess returtyp till .Task<T> -
CS4033: Operatorn '
await' kan endast användas inom en asynkron metod. Överväg att markera den här metoden med modifierarenasyncoch ändra dess returtyp till .Task
Följ dessa regler om du vill använda operatorn await korrekt. För mer information, se Asynkron programmering med asynk och vänt.
- Använd inte
awaiti catch-satser (CS1985). Även om du kan användaawaiti try-block och finally-block (i C# 6 och senare), medför catch-block särskilda utmaningar med undantagshantering och kontrollflöde. - Använd inte
awaitinvändigt ilocksatsblock (CS1996). Kompilatorn stöder inte detta för att undvika att kod som är utsatt för dödlägen genereras. - Använd
awaitendast på specifika platser i frågeuttryck (CS1995): i det första samlingsuttrycket för den inledandefromsatsen eller i samlingsuttrycket för enjoinsats. - Markera metoder eller lambda-uttryck med
asyncmodifieraren innan du använderawait(CS1992, CS4032, CS4033). - Se till att väntande typer har en tillgänglig
GetAwaitermetod som returnerar en awaiter-typ (CS1986). - Gäller
awaitinte för uttryck av typenvoid(CS4008). - Ändra returtypen till
Taskför metoder som inte returnerar ett värde ellerTask<T>för metoder som returnerar ett värde.
Krav för asynkron metodsignatur
-
CS1983: Eftersom det här är en asynkron metod måste returuttrycket vara av typen "
Task<T>" i stället för "T". -
CS1994: Modifieraren kan
asyncbara användas i metoder som har en brödtext. - CS4009: En ogiltig eller int returnerande startpunkt kan inte vara asynkron.
- CS8892: Metoden används inte som startpunkt eftersom en synkron startpunkt hittades.
-
CS9330: '
MethodImplAttribute.Async' kan inte tillämpas manuellt på metoder. Markera metoden .async
Följ dessa signaturkrav om du vill deklarera asynkrona metoder korrekt. Mer information finns i Asyncs huvudreturvärden.
- Returnera någon av de giltiga typerna:
void, Task,Task<T>, en aktivitetsliknande typ, IAsyncEnumerable<T>eller IAsyncEnumerator<T> (CS1983). -
asyncAnvänd modifieraren endast på metoder med en brödtext (CS1994).asyncTa bort modifieraren på abstrakta metoder i gränssnitt eller klasser. - Uppdatera till C# 7.1 eller senare för att använda
asyncpåMain-startpunkten, eller att undvika att användaasyncpå startpunkter i tidigare versioner (CS4009). - Ta bort synkrona startpunkter om du har både synkroniserings- och asynkrona startpunkter (CS8892).
- Använd nyckelordet
asynci stället för att tillämpaMethodImplAttribute.Asyncmanuellt (CS9330).
Asynkrona metoder
- CS1989: Async lambda-uttryck kan inte konverteras till uttrycksträd.
- CS1991: "Typ" kan inte implementera "händelse" eftersom det är en Windows Runtime-händelse och "händelse" är en vanlig .NET-händelse.
- CS1997: Eftersom funktionen är en asynkron metod som returnerar ett värde får ett returnyckelord inte följas av ett objektuttryck.
-
CS1998: Den här asynkrona metoden saknar operatorer
awaitoch körs synkront. Överväg att använda operatorn "await" för att vänta på icke-blockerande API-anrop, eller "await Task.Run(...)" för att utföra CPU-bundet arbete på en bakgrundstråd. -
CS4014: Eftersom det här anropet inte väntas in, fortsätter den aktuella metoden utan att vänta på att anropet ska slutföras. Överväg att tillämpa operatorn
awaitpå resultatet av anropet. -
CS9123: Operatorn '
&' ska inte användas på parametrar eller lokala variabler i asynkrona metoder.
Följ dessa metodtips för att skriva asynkron kod korrekt och undvika vanliga fallgropar. För mer information, se Asynkron programmering med asynk och vänt.
- Vänta alltid på anrop till asynkrona metoder som returnerar Task eller Task<TResult> (CS4014). Oväntade anrop kan leda till missade undantag och oförutsägbart beteende.
- Returnera inte ett värde från asynkrona metoder som returnerar
Task(icke-generiska), användTask<T>i stället (CS1997). - Inkludera minst en
awaitoperator i asynkronaasyncmetoder eller ta bort modifieraren (CS1998). - Ta bort -instruktionen
returnom metoden ska returneraTask(CS1997, CS1998). - Ändra metodens returtyp till
Task<T>för att returnera ett värde (CS1997, CS1998). -
asyncTa bort modifieraren och returnera uppgiften direkt om du inte behöver asynkron tillståndsdatorn (CS1997, CS1998). - Använd inte asynkrona metoder i uttrycksträd (CS1989). Uttrycksträd representerar kod som data och stöder inte de komplexa tillståndsdatortransformeringar som krävs av asynkrona metoder.
- Markera inte accessorer för tillägg eller borttagning i ett gränssnitt eller WinRT-händelse som asynkrona (CS1991). Det här är en plattformsspecifik begränsning för Windows Runtime-samverkan.
- Undvik att använda adress för operatorn (
&) på uttryck i asynkrona metoder (CS9123). Målet kan flyttas i minnet under avstängningen, vilket gör pekaren ogiltig.